SpringBoot整合MQ消息队列
SpringBoot整合MQ
- 借鉴的文章
- 1.什么是MQ
- 2.消息队列可以做什么
- 3.下载安装MQ
- 4.SpringBoot整合MQ的步骤
借鉴的文章
https://www.jianshu.com/p/d329c01b8821
https://www.jianshu.com/p/b93d54d3584b
1.什么是MQ
ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线。ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现,尽管JMS规范出台已经是很久的事情了,但是JMS在当今的J2EE应用中间仍然扮演着特殊的地位
2.消息队列可以做什么
顾名思义,mq主要还是为了提高服务器响应速度,提高客户体验.举个例子大家就应该明白了。
比如当用户登录某商城后,点击某商品要求发送邮件或者发送短信,此时邮件和短信是有可能失败的,如果同步的话必然会引起客户长时间等待,不利于客户体验(mq是异步).所以mq可以设置一个定时器,每隔一段时间对于发送失败的邮件和短信重新发送。
3.下载安装MQ
下载地址:http://activemq.apache.org/components/classic/download/
将下载好的zip文件解压就可以直接使用了,选择自己电脑的版本,点击activemq.bat文件,类似与tomcat的使用,打开成功之后显示了MQ的端口
在浏览器打开查看,用户名和密码在conf/users.properties文件中可以查看,其他的文件解释:
bin目录:用于存放activemq启动,停止的批处理
conf目录:用于activemq的配置文件
data目录:用于存放activemq的日志
docs目录:用于存放activemq的说明文档
examples目录:用于存放activemq对外开放接口示例
lib目录:用于存放相关jar包
webapps/webapps-demo目录:启动activemq ,访问ActiveMQ的管理页面
到这里我们的MQ就可以使用了,接下来就可以使用java代码去集成
4.SpringBoot整合MQ的步骤
1.添加maven依赖
<!-- 整合MQ --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-activemq</artifactId></dependency>
2.yml配置
##指定队列名称
queue: mq-testspring:##mq配置activemq:broker-url: tcp://127.0.0.1:61616user: adminpassword: admin
3.定义生产者代码
这里是借鉴别人的文章和方式,也是可以比较明显的查看到结果的
1.定义一个测试的实体类
/*** @ Author :Zgq* @ Date :Created in 16:34 2019/6/10* @ Description:mq测试* @ Modified By:* @Version: $*/
public class MqTest {private Long id;private String name;private Integer age;public MqTest(Long id, String name, Integer age) {super();this.id = id;this.name = name;this.age = age;}public Long getId() {return id;}public void setId(Long id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}
}
2.定义生产者的代码
/*** @ Author :Zgq* @ Date :Created in 16:32 2019/6/10* @ Description:创建Producer,生产者,往消息队列中发送消息,为了演示明显,加入了定时任务* @ Modified By:* @Version: $*/
import java.util.UUID;
import javax.jms.Queue;
import com.example.echart.entity.MqTest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.core.JmsMessagingTemplate;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import com.alibaba.fastjson.JSONObject;
/*** @classDesc: 功能描述:(生产者代码)*/
@Component//将Producer注入到容器
@EnableScheduling//定时任务的注解
public class Producer {@Autowiredprivate JmsMessagingTemplate jmsMessagingTemplate;@Autowired//注入private Queue queue;private int age = 18;@Scheduled(fixedDelay = 5000)//每隔5秒钟执行这个方法public void send() {System.out.println("---------mq定时器运行---------");age++;MqTest mqTest = new MqTest(System.currentTimeMillis(), UUID.randomUUID().toString(), age);String json = new JSONObject().toJSONString(mqTest);//将实体类转换成json字符串System.out.println("json:" + json);jmsMessagingTemplate.convertAndSend(queue, json);//向指定队列中发送消息}
}
这是启动项目,定时器每隔5秒向我们定义的mq-test消息队列中插入数据,这里的MqTest对象是自己定义的一个实体类,可以随便写,启动项目之后我们在Queue中可以看到我们定义的队列,并且接收到了多少条数据,发送了多少条数据
随着定时器的执行,还会不停的向该队列中插入数据,放到真实项目中,应该就是结合业务放入对应的信息,然后等待消费者去获取
3.定义消费者的代码
/*** @ Author :Zgq* @ Date :Created in 16:41 2019/6/10* @ Description:消费者,接收mq的信息* @ Modified By:* @Version: $*/
import com.example.echart.entity.MqTest;
import org.springframework.jms.annotation.JmsListener;
import org.springframework.stereotype.Component;
import com.alibaba.fastjson.JSONObject;
@Component
public class Consumer {//activeMq监听监听接收消息队列@JmsListener(destination = "${queue}")public void receive(String msg){//这个msg就是从消息队列获得到的参数System.out.println(msg);JSONObject jsonObject = new JSONObject();MqTest userEntity = jsonObject.parseObject(msg,MqTest.class);//将json转换成实体类System.out.println(userEntity.getName()+"---"+userEntity.getId());}
}
运行项目,这是会将我们刚刚放入队列中的信息发送出去
这里就是我们刚刚的定时器放入了20条数据,然后运行消费者之后全部发了出去
学习地址:https://www.bilibili.com/video/av45541255
SpringBoot整合MQ消息队列相关推荐
- springboot整合redis消息队列
前言 消息队列作为一种常用的异步通信解决方案,而redis是一款高性能的nosql产品,今天就给大家介绍一下,如何使用redis实现消息队列,并整合到springboot. 两个消息模型 1. 队列模 ...
- SpringBoot整合RabbitMQ消息队列
RabbitMQ 一.RabbitMQ介绍 1.1 现存问题 服务调用:两个服务调用时,我们可以通过传统的HTTP方式,让服务A直接去调用服务B的接口,但是这种方式是同步的方式,虽然可以采用Sprin ...
- SpringBoot整合activeMQ消息队列手动签收(Session.CLIENT_ACKNOWLEDGE)为什么失效啊?
今天在家隔离办公,不太忙,然后就琢磨起来消息队列activeMQ的消息事务来解决分布式事务,但是奈何在SpringBoot整合activeMQ时,其消费者手动签收消息时出现了问题-->当acti ...
- SpringBoot整合RabbitMQ 消息可靠投递、手动ack、延迟队列、死信队列、消息幂等性保障、消息积压
1.消息可靠投递 在使用 RabbitMQ 的时候,作为消息发送方希望杜绝任何消息丢失或者投递失败场景.RabbitMQ 为我们提供了两种方式用来控制消息的投递可靠性模式. confirm 确认模式 ...
- springboot:整合redis消息队列
整合redis消息队列 项目依赖 <!-- RedisTemplate --><dependency><groupId>org.springframework.bo ...
- MQ消息队列中间件:
MQ消息队列中间件: 微服务间通讯有同步和异步两种方式: 同步通讯:就像打电话,需要实时响应. 异步通讯:就像发信息,不需要马上回复. 同步调用的优点: 时效性较强,可以立即得到结果 同步调用的问题: ...
- MQ消息队列的使用(邮件的发送)
MQ消息队列的使用(邮件的发送) MQ消息队列 A:利用Maven加载相关的jar报,当然也可以自己写MQ,用来生产者的消息 jms交给spring进行管理 C.生产者配置 D.创建生产者消息转换器 ...
- 阿里云ACE共创空间——MQ消息队列产品测试
一.产品背景 消息队列是阿里巴巴集团自主研发的专业消息中间件. 产品基于高可用分布式集群技术,提供消息订阅和发布.消息轨迹查询.定时(延时)消息.资源统计.监控报警等一系列消息云服务,是企业级互联网架 ...
- IM开发基础知识补课(五):通俗易懂,正确理解并用好MQ消息队列
1.引言 消息是互联网信息的一种表现形式,是人利用计算机进行信息传递的有效载体,比如即时通讯网坛友最熟悉的即时通讯消息就是其具体的表现形式之一. 消息从发送者到接收者的典型传递方式有两种: 1)一种我 ...
最新文章
- java 具有绘图能力的类,《Java程序设计》复习题_绘图
- hdu 3954(线段树区间更新)
- 使用VSCode写Python代码的推荐安装的插件
- 图的表达与遍历--邻接矩阵和邻接表
- Flutter入门:Button
- 记 QT 应用开发中的一个二进制兼容性问题
- 一个本地分支能关联两个远程仓库吗_使用git分支保存hexo博客源码到github
- Ubuntu解决sudo source command not found错误
- 【Docker】安装并测试安装成功
- 达梦数据charindex_更新日志 · dotnetcore/FreeSql Wiki · GitHub
- Android开发之StrictMode
- EnterpriseLibrary2.0的学习-DAAB
- 管理感悟:眼高手低到眼高手高
- jquery.uploadify php,jquery组件Uploadify的使用
- 查看局域网内的所有设备的IP地址
- 从“老公”的称呼来历,看男人地位的变迁!
- mysql common是什么_MySQL概述及入门(一)
- 基于安卓WebServicw天气预报demo
- lae界面开发工具入门之介绍五--秘籍篇-杂项
- linux 类似winscp_winscp 有没有Linux版的