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来完成一个日志管理模块.大概的需求是这样的:系统中有很多地方需要记录操作日志,比如登 ...
随机推荐
- postgresql源码编译安装(centos)
centos6.8安装postgresql-9.6.8 一.环境 centos6.8 postgresql-9.6.8 二.准备工作 虚拟机可以连接外网 三.先安装make,gcc,gcc-c++,r ...
- C# 防火墙操作之特定程序
将特定程序加入防火墙组,与将特定端口加入防火墙流程类似.详情见“C# 防火墙操作之特定端口”.其主要代码为: /// <summary> /// 允许应用程序通过防火墙 /// </ ...
- 十一、python函数学习
1. 定义函数 def 函数名(形参): 函数体 return xxx--------其下面的内容不再执行 ---------------------------------------- ...
- 在window 10查看一下指定命令行工具所在的位置
很久之前安装过node,现在想要给node升级,通过where命令查看一下node的安装位置
- leetcode 142. 环形链表 II(c++)
给定一个链表,返回链表开始入环的第一个节点. 如果链表无环,则返回 null. 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始). 如果 pos 是 - ...
- flex embed 使用
Flex 软件中经常需要使用一些外部的资源,如图片.声音.SWF或字体,虽然你也可以在软件运行的时候引入和载入,但是也可能经常需要直接将这些资源编译(Compile)到软件中,也就是直接嵌入资源(Em ...
- [转载]OpenSSL中文手册之命令行详解(未完待续)
声明:OpenSSL之命令行详解是根据卢队长发布在https://blog.csdn.net/as3luyuan123/article/details/16105475的系列文章整理修改而成,我自己 ...
- vue组件生命周期
分为4个阶段:create/mount/update/destroy 每一个阶段都对应着有自己的处理函数 create: beforeCreate created 初始化 mount: beforeM ...
- 微信小程序 scroll-View 动态定位之scroll-into-view
- TensorFlow学习笔记8-深度学习的正则化
深度学习的正则化 回顾一些基本概念 概念 描述 设计矩阵 数据集在特征向量上的表示 训练误差 学习到的模型与训练集标签之间的误差 泛化误差(测试误差) 学习到的模型与测试集之间的误差 欠拟合 模型的训 ...