SpringBoot---异步消息
1、概述
1.1、SpringBoot 对 JMS 的自动配置 位于 org.springframework.boot.autoconfigure.jms下;
1.2、SpringBoot 支持 JMS 的实现 :ActiveMQ、HornetQ、Artemis;
1.3、ActiveMQ
1.3.1、概述
SpringBoot 为我们 定义了 ActiveMQConnectionFactory 的Bean 作为连接;
通过 "spring.activemq" 为前缀 的属性 来配置 ActiveMQ 的连接属性:

SpringBoot 在 JmsAutoConfiguration 为我们 配置了 JmsTemplate,且 为我们 开启了 注解式 消息监听 的支持(自动开启 @EnableJms);
1.3.2、实战
a,下载ActiveMQ
第一种方式:Docker 安装
docker run -d -p 61616:61616 -p 8161:8161 cloudesire/activemq
61616是消息代理的端口,8161是ActiveMQ的web管理界面端口,访问localhost:8161/,账户、密码:admin,admin
第二种方式:内嵌ActiveMQ
b,加载依赖
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jms</artifactId>
<version>5.2.1.RELEASE</version>
</dependency> <dependency>
<groupId>javax.jms</groupId>
<artifactId>javax.jms-api</artifactId>
<version>2.0.1</version>
</dependency> <!-- 消息接收者 -->
<!-- https://mvnrepository.com/artifact/org.apache.activemq/activemq-client -->
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-client</artifactId>
<version>5.15.11</version>
</dependency> <!-- 消息发布者 -->
<!-- https://mvnrepository.com/artifact/org.apache.activemq/activemq-broker -->
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-broker</artifactId>
<version>5.15.11</version>
</dependency>
package com.an.yibumessage.activemq; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.jms.core.JmsTemplate; /**
* @description: 消息发送者 SpringBoot 为我们提供了CommandLineRunner,用于程序启动后执行的代码
* @author: anpeiyong
* @date: Created in 2019/12/4 19:19
* @since:
*/
@SpringBootApplication
public class MsgSender implements CommandLineRunner { //jmsTemplate:注入SpringBoot为我们提供的jmsTemplate
@Autowired
JmsTemplate jmsTemplate; public static void main(String[] args) {
SpringApplication.run(MsgSender.class,args);
} @Override
public void run(String... args) throws Exception {
//提供jmsTemplate的send方法 向 my-destination 的目的地(等于在 消息代理 上定义了一个my-destination的目的地) 发送 Msg 消息
jmsTemplate.send("my-destination",new Msg());
}
}
package com.an.yibumessage.activemq; import org.springframework.jms.annotation.JmsListener;
import org.springframework.stereotype.Component; /**
* @description: 消息接收者
* @author: anpeiyong
* @date: Created in 2019/12/4 19:25
* @since:
*/
@Component
public class MsgReceiver { //@JmsListener(destination = "my-destination")指定监听的目的地
@JmsListener(destination = "my-destination")
public void receiveMsg(String msg){
System.out.println("接收到的消息:"+msg);
} }
package com.an.yibumessage.activemq; import org.springframework.jms.core.MessageCreator; import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.Session; /**
* @description: 消息
* @author: anpeiyong
* @date: Created in 2019/12/4 19:17
* @since:
*/
public class Msg implements MessageCreator {
@Override
public Message createMessage(Session session) throws JMSException {
return session.createTextMessage("测试消息");
}
}
1.4、RabbitMQ
1.4.1、SpringBoot 对 AMQP 的自动配置 位于 org.framework.boot.autoconfigure.amqp 下;
1.4.2、SpringBoot 为我们 配置了 连接的 ConnectionFactory 、RabbitTemplate,且 为我们 开启了 注解式 消息监听(即自动开启@EnableRabbit);
1.4.3、RabbitMQ 的配置 可以通过"spring.rabbitmq" 来配置 RabbitMQ:

1.4.4、实战
1.4.4.1、下载RabbitMQ
Docker 安装:docker run -d -p 5672:5672 -p 15672:15672 rabbitmq:3-management
5672是 消息代理 的端口、15672是 web管理界面端口,访问localhost:15672/,账户、密码:guest,guest
1.4.4.2、加载依赖
<!-- AMQP -->
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-amqp -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
<version>2.2.1.RELEASE</version>
</dependency>
package com.an.yibumessage.rabbitmq; import org.springframework.amqp.core.Queue;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean; /**
* @description: 定义发送者,目的地
* @author: anpeiyong
* @date: Created in 2019/12/5 20:00
* @since:
*/
@SpringBootApplication
public class RabbitMsgSender implements CommandLineRunner { @Autowired
RabbitTemplate rabbitTemplate; /**
* 定义目的地:队列名为rabbit-queue
* @return
*/
@Bean
public Queue getQueue(){
return new Queue("rabbit-queue");
} public static void main(String[] args) {
SpringApplication.run(RabbitMsgSender.class,args);
} @Override
public void run(String... args) throws Exception {
//通过 RabbitTemplate向 rabbit-queue的队列 发送 消息: 来自rabbitmq的问候
rabbitTemplate.convertAndSend("rabbit-queue","来自rabbitmq的问候");
}
}
package com.an.yibumessage.rabbitmq; import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component; /**
* @description: 消息接收者
* @author: anpeiyong
* @date: Created in 2019/12/5 20:07
* @since:
*/
@Component
public class RabbitReceiver { /**
* @RabbitListener(queues = "rabbit-queue") 监听 Rabbit向目的地 rabbit-queue 发送的消息
* @param msg
*/
@RabbitListener(queues = "rabbit-queue")
public void receiveMsg(String msg){
System.out.println("接收到的消息:"+msg);
}
}
SpringBoot---异步消息的更多相关文章
- (十七)SpringBoot之使用异步消息服务jms之ActiveMQ
一.引入maven依赖 <dependencies> <dependency> <groupId>org.springframework.boot</grou ...
- SpringBoot系列八:SpringBoot整合消息服务(SpringBoot 整合 ActiveMQ、SpringBoot 整合 RabbitMQ、SpringBoot 整合 Kafka)
声明:本文来源于MLDN培训视频的课堂笔记,写在这里只是为了方便查阅. 1.概念:SpringBoot 整合消息服务 2.具体内容 对于异步消息组件在实际的应用之中会有两类: · JMS:代表作就是 ...
- #研发中间件介绍#异步消息可靠推送Notify
郑昀 基于朱传志的设计文档 最后更新于2014/11/11 关键词:异步消息.订阅者集群.可伸缩.Push模式.Pull模式 本文档适用人员:研发 电商系统为什么需要 NotifyServer? ...
- 1.异步消息Jms及其JmsTemplate的源代码分析,消息代理ActiveMQ
一. 介绍 借助Spring,有多种异步消息的可选方案,本章使用Jms.Jms的消息模型有两种,点对点消息模型(队列实现)和发布-订阅消息模型(主题). 图1.点对点消息模型(一对一) 图2.发布-订 ...
- Java异步消息平台
l JAVA平台异步消息模块 JAVA平台异步消息模块,是一个针对RabbitMQ的消息发送及处理封装,包含消息的配置.发送.接收.失败重试.日志记录等,总共分为4个部分: 1)RabbitMQ访问 ...
- C#实现异步消息队列
原文:C#实现异步消息队列 拿到新书<.net框架设计>,到手之后迅速读了好多,虽然这本书不像很多教程一样从头到尾系统的讲明一些知识,但是从项目实战角度告诉我们如何使用我们的知识,从这本书 ...
- Android 异步消息处理机制前篇(二):深入理解Message消息池
版权声明:本文出自汪磊的博客,转载请务必注明出处. 上一篇中共同探讨了ThreadLocal,这篇我们一起看下常提到的Message消息池到底是怎么回事,废话少说吧,进入正题. 对于稍有经验的开发人员 ...
- Android异步消息机制
Android中的异步消息机制分为四个部分:Message.Handler.MessageQueue和Looper. 其中,Message是线程之间传递的消息,其what.arg1.arg2字段可以携 ...
- 三.RabbitMQ之异步消息队列(Work Queue)
上一篇文章简要介绍了RabbitMQ的基本知识点,并且写了一个简单的发送和接收消息的demo.这一篇文章继续介绍关于Work Queue(工作队列)方面的知识点,用于实现多个工作进程的分发式任务. 一 ...
- 八.利用springAMQP实现异步消息队列的日志管理
经过前段时间的学习和铺垫,已经对spring amqp有了大概的了解.俗话说学以致用,今天就利用springAMQP来完成一个日志管理模块.大概的需求是这样的:系统中有很多地方需要记录操作日志,比如登 ...
随机推荐
- kubernetes-helm程序包管理器(二十)
helm概述 Helm是Kubernetes的包管理器,Helm 让我们能够像 yum 管理 rpm 包那样安装.部署.升级和删除容器化应用. Helm的核心术语: Chart:一个helm程序包,是 ...
- 主流架构 : MVP
1 背景 MVC 平时开发APP时会发现,activity职责非常重.以MVC角度来看: M:model数据操作层(网络请求,耗时操作,数据存取,其他逻辑操作) V:view,指xml布局文件,其实并 ...
- mongotemplate 简单使用
怎么说呢,工作需要,不可能给你慢慢学的时间,一切以先解决当前jira为前提, mondb 安装不说了网上一搜就有,推荐图形管理界面 robo3t 比较直观 1.多条件查询这个比较简单 有两种方法 1C ...
- python中的包和文件夹的区别
python的模块,就不得不说包(package),package是module的集合,在一个package中有很多的module, 还是以之前的index.py与baiduHq.py模块为案例,说明 ...
- linux下升级php5.4到php5.6
进入终端后查看php版本 php -v 输出可能如下: PHP 5.4.35 (cli) (built: Nov 14 2014 07:04:10) Copyright (c) 1997-2014 T ...
- openWRT利用mac地址限制局域网内设备访问外网
利用iptable设置防火墙: iptables -A INPUT -p tcp -m mac --mac-source 44:94:FC:25:68:8D --dport 80 -j DROP
- java项目中,针对缓存问题的处理方式【接口中的处理方式】
1.在service包中,分别建立了关于缓存的一系列的接口.类等,封装到一个工具包中: 临时缓存的接口(代码部分): package com.tools; import java.util.Date; ...
- SpringBoot(九) -- SpringBoot与数据访问
一.简介 对于数据访问层,无论是SQL还是NOSQL,Spring Boot默认采用整合Spring Data的方式进行统一处理,添加大量自动配置,屏蔽了很多设置.引入各种xxxTemplate,xx ...
- npm基本介绍及使用
1.什么是npm npm全称node package manager,是node包管理和分发工具.可以理解为前端的maven.通过npm可以很方便的下载js库,管理前端工程.node已经集成npm工具 ...
- 洛谷P4391 [BOI2009]Radio Transmission 无线传输
(https://www.luogu.org/problemnew/show/P4391) 题目描述 给你一个字符串,它是由某个字符串不断自我连接形成的. 但是这个字符串是不确定的,现在只想知道它的最 ...