消息中间件 - ActiveMQ Springboot (五)

application.properties

spring.activemq.broker-url=tcp://localhost:61616
spring.activemq.user=admin
spring.activemq.password=admin
spring.activemq.pool.enabled=true


import org.apache.activemq.ActiveMQConnectionFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jms.annotation.EnableJms;
import org.springframework.jms.config.DefaultJmsListenerContainerFactory;
import org.springframework.jms.config.JmsListenerContainerFactory;

import javax.jms.ConnectionFactory;

/**

 * 类说明:
 */
@Configuration
@EnableJms
public class ActiveMqConfiguration {

    @Value("${spring.activemq.user}")
    private String usrName;

    @Value("${spring.activemq.password}")
    private String password;

    @Value("${spring.activemq.broker-url}")
    private String brokerUrl;

    @Bean
    public ConnectionFactory connectionFactory(){
        ActiveMQConnectionFactory connectionFactory
                = new ActiveMQConnectionFactory();
        connectionFactory.setBrokerURL(brokerUrl);
        connectionFactory.setUserName(usrName);
        connectionFactory.setPassword(password);
        return connectionFactory;
    }

    @Bean("jmsTopicListenerContainerFactory")
    public JmsListenerContainerFactory jmsTopicListenerContainerFactory(
            ConnectionFactory connectionFactory
    ){
        DefaultJmsListenerContainerFactory factory
                = new DefaultJmsListenerContainerFactory();
        factory.setConnectionFactory(connectionFactory);
        factory.setPubSubDomain(true);
        return factory;
    }

}

生产者queue模式

@Service
public class ProducerQueue {

    @Autowired
    private JmsMessagingTemplate jmsTemplate;
    @Autowired
    private JmsTemplate template;//可以做更细微的控制

    // 发送消息,destination是发送到的队列,message是待发送的消息
    public void sendMessage(Destination destination, final String message){
        jmsTemplate.convertAndSend(destination, message);
        template.send(destination, new MessageCreator() {
            @Override
            public Message createMessage(Session session)
                    throws JMSException {
                TextMessage msg = session.createTextMessage();
                msg.setText("othre information");
                return msg;
            }
        });
    }


}

消费者queue模式

@Component
public class ConsumerAQueue {
    // 使用JmsListener配置消费者监听的队列,其中text是接收到的消息
    @JmsListener(destination = "springboot.queue")
    public void receiveQueue(String text){
        System.out.println(this.getClass().getName()+" receive msg:"+text);
    }
}
@Component
public class ConsumerBQueue {
    // 使用JmsListener配置消费者监听的队列,其中text是接收到的消息
    @JmsListener(destination = "springboot.queue")
    public void receiveQueue(String text) {
        System.out.println(this.getClass().getName()+" 收到的报文为:"+text);
    }
}

生产者topic模式:

@Service
public class ProducerTopic {

    @Autowired
    private JmsMessagingTemplate jmsTemplate;

    // 发送消息,destination是发送到的队列,message是待发送的消息
    public void sendMessage(Destination destination, final String message){
        jmsTemplate.convertAndSend(destination, message);
    }


}

消费者topic模式

@Component
public class ConsumerATopic {
    // 使用JmsListener配置消费者监听的队列,其中text是接收到的消息
    @JmsListener(destination = "springboot.topic",
            containerFactory = "jmsTopicListenerContainerFactory"
    )
    public void receiveTopic(String text) {
        System.out.println(this.getClass().getName()+" 收到的报文为:"+text);
    }
}
@Component
public class ConsumerBTopic {
    // 使用JmsListener配置消费者监听的队列,其中text是接收到的消息
    @JmsListener(destination = "springboot.topic",
            containerFactory = "jmsTopicListenerContainerFactory"
             )
    public void receiveTopic(String text) {
        System.out.println(this.getClass().getName()+" 收到的报文为:"+text);
    }
}

Request-Response模式

生产者:

@Service
public class ProducerR {

    @Autowired
    private JmsMessagingTemplate jmsTemplate;

    // 发送消息,destination是发送到的队列,message是待发送的消息
    public void sendMessage(Destination destination, final String message){
        jmsTemplate.convertAndSend(destination, message);

    }

    @JmsListener(destination = "out.replyTo.queue")
    public void consumerMessage(String text){
        System.out.println("从out.replyTo.queue收到报文"+text);
    }

}

消费者:

@Component
public class ConsumerR {
    // 使用JmsListener配置消费者监听的队列,其中text是接收到的消息
    @JmsListener(destination = "springboot.replyto.queue")
    @SendTo("out.replyTo.queue")
    public String receiveQueue(String text) {
        System.out.println(this.getClass().getName()+" 收到的报文为:"+text);
        return "Hello,I watch you";
    }
}

测试类:


import javax.jms.Destination;

@RunWith(SpringRunner.class)
@SpringBootTest
public class AmSpringbootApplicationTests {

    @Autowired
    private ProducerQueue producerQueue;
    @Autowired
    private ProducerR producerR;
    @Autowired
    private ProducerTopic producerTopic;

    @Test
    public void testQueueNormal() {
        Destination destination
                = new ActiveMQQueue("springboot.queue");
        for(int i=0; i<10; i++){
            producerQueue.sendMessage(destination,
                    "NO:"+i+";my name is Mark!!!");
        }
    }

    @Test
    public void testTopicNormal() {
        Destination destination
                = new ActiveMQTopic("springboot.topic");
        for(int i=0; i<3; i++){
            producerTopic.sendMessage(destination,
                    "NO:"+i+";James like 13 !!!");
        }
    }

    @Test
    public void testReplyTo() {
        Destination destination
                = new ActiveMQQueue("springboot.replyto.queue");
        for(int i=0; i<3; i++){
            producerR.sendMessage(destination,
                    "NO:"+i+";my name is Mark!!!");
        }
    }

}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值