笛里谁知壮士心,沙头空照征人骨。这篇文章主要讲述SpringBoot整合ActiveMq实现Queue和Topic两种模式(图文)相关的知识,希望能为你提供帮助。
【SpringBoot整合ActiveMq实现Queue和Topic两种模式(图文)】@[toc]
一、前言- 使用
文章图片
三、依赖准备
<
!-- activemq -->
<
dependency>
<
groupId>
org.springframework.boot<
/groupId>
<
artifactId>
spring-boot-starter-activemq<
/artifactId>
<
/dependency>
四、yml文件配置
spring:
activemq:
broker-url: tcp://127.0.0.1:61616
user: admin
password: admin
jms:
pub-sub-domain: true # 默认为false:queuetrue:topic
queue: queue_mq # 点对点消费名字
topic: topic_mq # 订阅式消费名字
五、配置Bean
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.annotation.EnableJms;
import javax.jms.Queue;
import javax.jms.Topic;
@Configuration
@EnableJms
public class ActiveMqConfig {@Value("${queue}")//对应yml文件中定义的queue
private String queue;
@Value("${topic}")//对应yml文件中定义的topic
private String topic;
/**
* 创建点对点的队列一个消息只能被一个消费者消费--- 一对一
* @return
*/
@Bean
public Queue queue(){
return new ActiveMQQueue(queue);
}
/**
* 创建订阅式的队列一个消息可以被多个消费者消费 --- 一对多
* @return
*/
@Bean
public Topic topic(){
return new ActiveMQTopic(topic);
}
}
六、创建生产者(Queue+Topic)
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.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.jms.Queue;
import javax.jms.Topic;
@RestController
public class ProducerController {@Autowired
private Queue queue;
@Autowired
private Topic topic;
@Autowired
private JmsMessagingTemplate jmsMessagingTemplate;
/**
* 点对点的消息队列的生产者
* @param string
*/
@GetMapping("/queue")
public void sendMsgQueue(@RequestParam String string){
System.out.println("消息已经发送,准备被消费,消息为 --->
"+string);
jmsMessagingTemplate.convertAndSend(queue,string);
}/**
* 一对多的消息队列的生产者
* @param string
*/
@GetMapping("/topic")
public void sendMsgTopic(@RequestParam String string){
System.out.println("消息已经发送,准备被消费,消息为 --->
"+string);
jmsMessagingTemplate.convertAndSend(topic,string);
}}
七、创建消费者(Topic模式下)
import org.springframework.jms.annotation.JmsListener;
import org.springframework.stereotype.Component;
@Component
public class TopicConsumer {/**
* 监听消息,名字为生产者发送的名字,要一致,不然监听不到.
* 因为是订阅者模式,可以有多个消费者,我们这里举两个来进行测试
* @param string
*/
@JmsListener(destination = "${topic}")
public void consumerTopicOne(String string){System.out.println("我是消费者一号:消费消息成功,信息为--->
"+string);
}@JmsListener(destination = "${topic}")
public void consumerTopicTwo(String string){System.out.println("我是消费者二号:消费消息成功,信息为--->
"+string);
}
}
八、测试结果(Topic模式下)
文章图片
九、ActiveMq网页版查看是否成功(Topic模式下)
文章图片
文章图片
十、创建消费者(Queue模式下)
import org.springframework.jms.annotation.JmsListener;
import org.springframework.stereotype.Component;
@Component
public class QueueConsumer {/**
* 监听消息,名字为生产者发送的名字,要一致,不然监听不到.
* 因为是队列模式,只能消费者
* @param string
*/
@JmsListener(destination = "${queue}")
public void consumerQueue(String string){System.out.println("消费消息成功,信息为--->
"+string);
}}
十一、测试结果(Queue模式下)
文章图片
十二、ActiveMq网页版查看是否成功(Queue模式下)
文章图片
十三、总结
推荐阅读
- 深入浅出CMS垃圾收集器
- 究竟 JDK 给我们提供了哪几种线程池,分别有什么特点()
- MySQL强人“锁”难《死磕MySQL系列 三》
- 100台机器上海量IP如何查找出现频率 Top 100()
- 基于CDH 6.3.0 搭建 Hive on Spark 及相关配置和调优
- 鸿蒙开源全场景应用开发——通讯协议
- 优化技术专题「线程间的高性能消息框架」再次细节领略Disruptor的底层原理和优势分析
- 新一代容器平台ACK Anywhere,来了
- 旗舰版win7系统网速变慢的7大因素