1、消息提供者
1-1 pom文件
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-activemq</artifactId> </dependency> <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> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
1-2 yml文件
server: port: 8080 application: name: pro spring: activemq: user: admin password: admin broker-url: failover:tcp://192.168.68.137:61616 pool: enabled: true max-connections: 10 queueName: publish.queue topicName: publish.topic
1-3 结构图
1-4 ActiveMQConfig
import org.apache.activemq.ActiveMQConnectionFactory; import org.apache.activemq.command.ActiveMQQueue; import org.apache.activemq.command.ActiveMQTopic; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.jms.config.DefaultJmsListenerContainerFactory; import org.springframework.jms.config.JmsListenerContainerFactory; import javax.jms.Queue; import javax.jms.Topic; @Configuration public class ActiveMQConfig { @Value("${queueName}") private String queueName; @Value("${topicName}") private String topicName; @Value("${spring.activemq.user}") private String usrName; @Value("${spring.activemq.password}") private String password; @Value("${spring.activemq.broker-url}") private String brokerUrl; @Bean public Queue queue(){ return new ActiveMQQueue(queueName); } @Bean public Topic topic(){ return new ActiveMQTopic(topicName); } @Bean public ActiveMQConnectionFactory connectionFactory() { return new ActiveMQConnectionFactory(usrName, password, brokerUrl); } @Bean public JmsListenerContainerFactory<?> jmsListenerContainerQueue(ActiveMQConnectionFactory connectionFactory){ DefaultJmsListenerContainerFactory bean = new DefaultJmsListenerContainerFactory(); bean.setConnectionFactory(connectionFactory); return bean; } @Bean public JmsListenerContainerFactory<?> jmsListenerContainerTopic(ActiveMQConnectionFactory connectionFactory){ DefaultJmsListenerContainerFactory bean = new DefaultJmsListenerContainerFactory(); //设置为发布订阅方式, 默认情况下使用的生产消费者方式 bean.setPubSubDomain(true); bean.setConnectionFactory(connectionFactory); return bean; }
1-5 PublishController
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jms.annotation.JmsListener; import org.springframework.jms.core.JmsMessagingTemplate; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.jms.Queue; import javax.jms.Topic; /** * @author: elvin */ @RestController @RequestMapping("/publish") public class PublishController { @Autowired private JmsMessagingTemplate jms; @Autowired private Queue queue; @Autowired private Topic topic; @RequestMapping("/queue") public String queue(){ for (int i = 0; i < 10 ; i++){ jms.convertAndSend(queue, "queue"+i); //这里的que可以自定义队列名称(String) } return "queue 发送成功"; } @JmsListener(destination = "out.queue") public void consumerMsg(String msg){ System.out.println(msg); } @RequestMapping("/topic") public String topic(){ for (int i = 0; i < 10 ; i++){ jms.convertAndSend(topic, "topic"+i); } return "topic 发送成功"; }
2. 消息的消费者
2-1 pom文件
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-activemq</artifactId> </dependency> <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> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
2-2 yml文件
server: port: 8011 application: name: con1 spring: activemq: user: admin password: admin broker-url: failover:tcp://192.168.68.137:61616 pool: enabled: true max-connections: 10 queueName: publish.queue topicName: publish.topic
2-3 结构图
2-4 ActiveMQConfig 与消息提供者一样
2-5 QueueListener
import org.springframework.jms.annotation.JmsListener; import org.springframework.messaging.handler.annotation.SendTo; import org.springframework.stereotype.Component; /** * @author: elvin */ @Component public class QueueListener { @JmsListener(destination = "publish.queue", containerFactory = "jmsListenerContainerQueue") //这里的destination是监听的队列名 @SendTo("out.queue") public String receive(String text){ System.out.println("QueueListener: consumer-a 收到一条信息: " + text); return "consumer-a received : " + text; } }
2-6 TopicListener
import org.springframework.jms.annotation.JmsListener; import org.springframework.stereotype.Component; /** * @author: elvin */ @Component public class TopicListener { @JmsListener(destination = "publish.topic", containerFactory = "jmsListenerContainerTopic") public void receive(String text){ System.out.println("TopicListener: consumer-a 收到一条信息: " + text); } }
3. 在配置一份一样的消费者 端口不一样而(其他不变)
4.
queue测试--------浏览器中访问: http://localhost:8080/publish/queue
topic测试----------浏览器访问页面: http://localhost:8080/publish/topic
queue是轮循获取消息 (过期可以使用)
topic是获取同样的消息 (过期不候)
5.可视化界面
链接地址:https://www.cnblogs.com/elvinle/p/8457596.html