activeMQ(二、与springboot集成)
POOM文件
首先导入activemq所需的jar包
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-activemq</artifactId> </dependency> </dependencies>
生产者
application.yml
server: port: 8090 servlet: context-path: /activemqProducer spring: activemq: broker-url: tcp://127.0.0.1:61616 user: 123 password: 123
ActiveMqConfig
package com.example.activemqtest.config; import org.apache.activemq.command.ActiveMQQueue; import org.apache.activemq.command.ActiveMQTopic; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import javax.jms.Queue; import javax.jms.Topic; @Configuration public class ActiveMQConfig { @Bean public Queue queue(){ return new ActiveMQQueue("queue2"); } @Bean public Topic topic(){ return new ActiveMQTopic("topic2"); } }
配置生产者要发送消息的队列或者主题,注入spring中
ProducterController
package com.example.activemqtest.controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jms.core.JmsMessagingTemplate; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import javax.jms.Queue; import javax.jms.Topic; @RestController public class ProducterController { @Autowired private JmsMessagingTemplate jmsMessagingTemplate; @Autowired private Queue queue; @Autowired private Topic topic; @GetMapping("/sendMsgByQueue") public String sendMsgByQueue(String msg){ jmsMessagingTemplate.convertAndSend(queue,msg); return msg; } @GetMapping("/sendMsgByTopic") public String sendMsgByTopic(String msg){ jmsMessagingTemplate.convertAndSend(topic,msg); return msg; } }
消费者
@JmsListener(destination = "queue2") //方法返回发送给queue3 @SendTo("queue3") public String handleMessage(String msg){ System.out.println("接收到的返回是:" + msg); return "返回:"+ msg; }
以上是消费者接收队列queue2的方式
若要接收topic,需要增加配置
server: port: 8091 servlet: context-path: /activemqConsumer spring: activemq: broker-url: tcp://127.0.0.1:61616 user: 123 password: 123 jms: pub-sub-domain: true
@JmsListener(destination = "topic2") public void topicConsumer1(String msg){ System.out.println("消费者1接收为:"+msg); } @JmsListener(destination = "topic2") public void topicConsumer2(String msg){ System.out.println("消费者2接收为:"+msg); }