时间:2021-05-19
写在前面: 从2018年底开始学习SpringBoot,也用SpringBoot写过一些项目。这里对学习Springboot的一些知识总结记录一下。如果你也在学习SpringBoot,可以关注我,一起学习,一起进步。
1、ActiveMQ简介
Apache ActiveMQ是Apache软件基金会所研发的开放源代码消息中间件;由于ActiveMQ是一个纯Java程序,因此只需要操作系统支持Java虚拟机,ActiveMQ便可执行。
2、ActiveMQ下载
下载地址:http://activemq.apache.org/components/classic/download/
下载完成后解压双击activemq.bat文件打开(不用安装,直接使用),目录和打开后效果如下:
运行后,浏览器访问http://localhost:8161/地址进入一下界面。
点击Manage ActiveMQ broker登录到ActiveMQ管理页面,默认账号和密码都是admin。管理页面如下:
1、新建SpringBoot项目
新建Springboot项目,添加对应的依赖。项目完整的pom.xml文件如下:
<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://ponent@EnableJmspublic class ConfigBean { @Value("${myqueue}") private String myQueue; @Value("${mytopic}") private String topicName; //队列 @Bean public ActiveMQQueue queue(){ return new ActiveMQQueue(myQueue); } //topic @Bean public Topic topic(){ return new ActiveMQTopic(topicName); }}队列模式即点对点传输。
点对点消息传递域的特点如下:
每个消息只能有一个消费者,类似于1对1的关系。好比个人快递自己领自己的。
消息的生产者和消费者之间没有时间上的相关性。无论消费者在生产者发送消息的时候是否处于运行状态,消费者都可以提取消息。好比我们的发送短信,发送者发送后不见得接收者会即收即看。
消息被消费后队列中不会再存储,所以消费者不会消费到已经被消费掉的消息。
1、队列生产者
QueueProducerController类为队列生产者控制器,主要向消息队列中发送消息。代码如下:
import org.springframework.beans.factory.annotation.Autowired;import org.springframework.jms.core.JmsMessagingTemplate;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;import javax.jms.Queue;/* * 队列消息生产者 */@RestControllerpublic class QueueProducerController { @Autowired private JmsMessagingTemplate jmsMessagingTemplate; @Autowired private Queue queue; /* * 消息生产者 */ @RequestMapping("/sendmsg") public void sendmsg(String msg) { System.out.println("发送消息到队列:" + msg); // 指定消息发送的目的地及内容 this.jmsMessagingTemplate.convertAndSend(this.queue, msg); }}2、队列消费者
QueueConsumerController类为队列消费者控制器,具体代码如下:
import org.springframework.beans.factory.annotation.Value;import org.springframework.jms.annotation.JmsListener;import org.springframework.web.bind.annotation.RestController;@RestControllerpublic class QueueConsumerController { /* * 消费者接收消息 */ @JmsListener(destination="${myqueue}") public void readActiveQueue(String message) { System.out.println("接受到:" + message); }}3、测试效果
运行项目在浏览器中访问http://localhost:8080/mq/sendmsg?msg=123。向消息队列中发送123。控制台输出效果:
ActiveMQ控制台显示:
【注】队列模式时,配置文件application.properties中spring.jms.pub-sub-domain属性必须设置为false。
topic模式基于发布/订阅模式的传输。
基于发布/订阅模式的传输的特点如下:
1、topic生产者
TopicProducerController类为topic生产者控制器,主要向消息队列中发送消息。代码如下:
import org.springframework.beans.factory.annotation.Autowired;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;/** topic消息生产者*/@RestControllerpublic class TopicProducerController { @Autowired private JmsMessagingTemplate jmsMessagingTemplate; @Autowired private Topic topic; /* * 消息生产者 */ @RequestMapping("/topicsendmsg") public void sendmsg(String msg) { System.out.println("发送消息到MQ:" + msg); // 指定消息发送的目的地及内容 this.jmsMessagingTemplate.convertAndSend(this.topic, msg); }}2、topic消费者
TopicConsumerController类为topic消费者控制器,其中写了两个消费者方法,可以理解为有两个用户订阅。具体代码如下:
import org.springframework.jms.annotation.JmsListener;import org.springframework.web.bind.annotation.RestController;@RestControllerpublic class TopicConsumerController { /* * 消费者接收消息 */ @JmsListener(destination="${mytopic}") public void readActiveQueue(String message) { System.out.println("接受到:" + message); } @JmsListener(destination="${mytopic}") public void readActiveQueue1(String message) { System.out.println("接受到:" + message); }}3、测试效果
运行项目在浏览器中访问http://localhost:8080/mq/topicsendmsg?msg=123。向消息队列中发送123。控制台输出效果(有两个消费者方法):
ActiveMQ控制台显示:
【注】Topic模式时,配置文件application.properties中spring.jms.pub-sub-domain属性必须设置为true。
到此这篇关于详解Springboot整合ActiveMQ(Queue和Topic两种模式)的文章就介绍到这了,更多相关Springboot整合ActiveMQ内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文介绍了springboot整合JMS(ActiveMQ实现),分享给大家,也给自己留个学习笔记。一、安装ActiveMQ具体的安装步骤,请参考我的另一篇文章
Android两种启动模式的实例详解Intent的FLAG_ACTIVITY_CLEAR_TOP和FLAG_ACTIVITY_REORDER_TO_FRONTA
SpringBoot提供了两种“开机自启动”的方式,ApplicationRunner和CommandLineRunner这两种方式的目的是为了满足,在容器启动
Springboot给我们提供了两种“开机启动”某些方法的方式:ApplicationRunner和CommandLineRunner。这两种方法提供的目的是为
RabbitMQ是比较常用的AMQP实现,这篇文章是一个简单的Springboot整合RabbitMQ的教程。安装ActiveMQ服务器,(也可以不安装,如果不