【SpringBoot系列5】SpringBoot整合RabbitMQ
前言:
因为项目需要用到RabbitMQ,前几天就看了看RabbitMQ的知识,记录下SpringBoot整合RabbitMQ的过程。
给出两个网址:
RabbitMQ官方教程:http://www.rabbitmq.com/getstarted.html
SpringBoot整个RabbitMQ教程:https://docs.spring.io/spring-boot/docs/2.0.1.RELEASE/reference/htmlsingle/#boot-features-amqp
正文:
1:最简单的HelloWorld
首先加上SpringBoot的依赖
<!-- rabbitmq -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
其实我们要申明一个队列,这里队列存放生产者生产的消息,然后消费者来这里面取出来
@Configuration
public class RabbitBeanConf { public static final String QUEUE = "queue"; @Bean
public Queue queue() {
return new Queue(QUEUE, true);
}
}
生产者:
@Service
public class RabbitSender { @Autowired
AmqpTemplate amqpTemplate; public void send(String msg) {
amqpTemplate.convertAndSend(RabbitBeanConf.QUEUE, msg);
System.out.println("生产者生产了一个消息: " + msg + " " + new Date().getTime());
}
}
消费者:
@Service
public class RabbitReceiver { @RabbitListener(queues = RabbitBeanConf.QUEUE)
public void receive(String msg) { System.out.println("消费者收到了一个消息: " + msg + " " + new Date().getTime());
}
}
2:广播模式(Fanout模式)
这个模式不同于上面的模式,这个模式只要一个生产者生产出一个消息,那么所有消费者全部可以接收到。
最简单一个例子就是你微信群发消息的时候,你发了一条消息,但你的好友全部都能收到这条消息
RabbitMQ配置:
@Configuration
public class FanoutRabbitMQConfig { //默认持久化durable为true
//根据方法名来进行绑定的 firstFanoutQueue()
@Bean
public Queue firstFanoutQueue() {
return new Queue("firstFanoutQueue");
} @Bean
public Queue secondFanoutQueue() {
return new Queue("secondFanoutQueue");
} //默认持久化durbale为true
//exchange交换机
@Bean
public FanoutExchange fanoutExchange() {
return new FanoutExchange("fanoutExchange");
} /**
* 以下两种方法都可以成功
*
* @return
* 2018年6月11日
*/
@Bean
public Binding bindingFirst() {
return BindingBuilder.bind(firstFanoutQueue()).to(fanoutExchange());
} @Bean
public Binding bindingSecond(FanoutExchange fanoutExchange, Queue secondFanoutQueue) {
return BindingBuilder.bind(secondFanoutQueue).to(fanoutExchange);
}
}
这里我解释一下,官方引入了一个叫做 “exchange”交换机的东西。
我是这样理解的:这个交换机主要是为了解耦生产了和消费者直接的强联系。生产者不直接往队列里面送东西了,而且往exchange里面送东西,然后exchange绑定想要送消息进去的队列,然后消费者监听即可。主要解耦。
生产者:
@Service
public class FanoutSender { @Autowired
AmqpTemplate amqpTemplate; public void send(String msg) { amqpTemplate.convertAndSend("fanoutExchange", "", msg);
System.out.println("生产者生产了一个消息: " + msg + " " + new Date().getTime());
}
}
消费者:
@Service
public class FanoutRecevi { @RabbitListener(queues = {"firstFanoutQueue", "secondFanoutQueue"})
public void receive(String msg) { System.out.println("消费者收到了一个消息: " + msg + " " + new Date().getTime());
}
}
3:Topic模式
感觉和直接模式(direct模式)有点相像。只不过这里用了类似正则的东西,一个exchange匹配符合规则的队列。
topic 和 direct 类似, 只是匹配上支持了"模式", 在"点分"的 routing_key 形式中, 可以使用两个通配符:
*
表示一个词.#
表示零个或多个词.
4:Header模式
headers 也是根据规则匹配, 相较于 direct 和 topic 固定地使用 routing_key , headers 则是一个自定义匹配规则的类型.
在队列与交换器绑定时, 会设定一组键值对规则, 消息中也包括一组键值对( headers 属性), 当这些键值对有一对, 或全部匹配时, 消息被投送到对应队列.
【SpringBoot系列5】SpringBoot整合RabbitMQ的更多相关文章
- java框架之SpringBoot(12)-消息及整合RabbitMQ
前言 概述 大多数应用中,可通过消息服务中间件来提升系统异步通信.扩展解耦的能力. 消息服务中两个重要概念:消息代理(message broker)和目的地(destination).当消息发送者发送 ...
- 基于springboot工程浅谈整合rabbitmq怎么样防止消息发送mq不丢失和消费mq的消息防止丢失
本文只针对springboot整合rabbitmq的消息防丢失,话不多说,上干货.... 设置发送mq消息不丢失实现思路 执行的方案: 第一步,要对队列,消息以及交换机进行持久化操作(保存到物理磁盘中 ...
- Springboot系列:Springboot与Thymeleaf模板引擎整合基础教程(附源码)
前言 由于在开发My Blog项目时使用了大量的技术整合,针对于部分框架的使用和整合的流程没有做详细的介绍和记录,导致有些朋友用起来有些吃力,因此打算在接下来的时间里做一些基础整合的介绍,当然,可能也 ...
- SPRING-BOOT系列之SpringBoot快速入门
今天 , 正式来介绍SpringBoot快速入门 : 可以去如类似 https://docs.spring.io/spring-boot/docs/2.1.0.BUILD-SNAPSHOT/refer ...
- spring boot 2.x 系列 —— spring boot 整合 RabbitMQ
文章目录 一. 项目结构说明 二.关键依赖 三.公共模块(rabbitmq-common) 四.服务消费者(rabbitmq-consumer) 4.1 消息消费者配置 4.2 使用注解@Rabbit ...
- SPRING-BOOT系列之SpringBoot的诞生及其和微服务的关系
转载自 : https://www.cnblogs.com/ityouknow/p/9034377.html 微服务架构 微服务的诞生并非偶然,它是在互联网高速发展,技术日新月异的变化以及传统架构无法 ...
- SpringBoot系列八:SpringBoot整合消息服务(SpringBoot 整合 ActiveMQ、SpringBoot 整合 RabbitMQ、SpringBoot 整合 Kafka)
声明:本文来源于MLDN培训视频的课堂笔记,写在这里只是为了方便查阅. 1.概念:SpringBoot 整合消息服务 2.具体内容 对于异步消息组件在实际的应用之中会有两类: · JMS:代表作就是 ...
- springboot 学习之路 20 (整合RabbitMQ)
整合RabbitMQ: 我的操作系统是window7 ,所以在整合ribbotMQ之前需要先安装rabbitMq服务:安装步骤请参考:window下安装RabbitMQ 这个详细介绍了安装步骤,请按 ...
- springboot学习笔记-6 springboot整合RabbitMQ
一 RabbitMQ的介绍 RabbitMQ是消息中间件的一种,消息中间件即分布式系统中完成消息的发送和接收的基础软件.这些软件有很多,包括ActiveMQ(apache公司的),RocketMQ(阿 ...
随机推荐
- php支付宝手机网页支付类实例
<?php $alipayConfig = array( 'key' => 'xxxxx', //买卖安全校验码,用于签名的32位密钥 'transport' => 'https', ...
- 【推荐】介绍两款Windows资源管理器,Q-Dir 与 FreeCommander XE(比TotalCommander更易用的免费资源管理器)
你是否也像我一样,随着硬盘.文件数量的增加,而感到对于文件的管理越来越乏力. 于是我试用了传说中的各种软件,包括各种Explorer外壳,或者第三方资源管理器. 最后我确定下来经常使用,并推荐给您的是 ...
- .NET MVC 学习笔记(四)— 基于Bootstarp自定义弹出框
.NET MVC 学习笔记(四)—— 基于Bootstarp自定义弹出框 转载自:https://www.cnblogs.com/nele/p/5327380.html (function ($) { ...
- 日期时间类:Date,Calendar,计算类:Math
日期时间类 计算机如何表示时间? 时间戳(timestamp):距离特定时间的时间间隔. 计算机时间戳是指距离历元(1970-01-01 00:00:00:000)的时间间隔(ms). 计算机中时间2 ...
- Python2 指定文件编码格式需要注意的地方
python2 中默认的编码格式是unicode, 开发人员经常需要根据需要,将python文件的编码格式设置为utf-8,我们可以在python文件的第一行进行设置,加入如下代码: # encodi ...
- Java代码审计连载之—SQL注入
前言近日闲来无事,快两年都没怎么写代码了,打算写几行代码,做代码审计一年了,每天看代码都好几万行,突然发现自己都不会写代码了,真是很DT.想当初入门代码审计的时候真是非常难,网上几乎找不到什么java ...
- BitArray源码解析
BitArray是C# System.Collections内置的集合,用于帮助进行位运算. BitArray的使用示例 // 创建两个大小为 8 的点阵列 BitArray ba1 = new Bi ...
- SSH 学习笔记
零.背景 在看 pm2 的 deploy 功能的时候,对 ssh 的不熟悉导致错误频出,包括之前对 github 的配置也用到了 SSH,所以找个机会整理一下. 一.介绍 SSH 是每一台 Linux ...
- Unity项目接入应用宝SDK实现截图功能
Unity项目接入应用宝SDK实现截图功能 问题由来 点击应用宝悬浮窗 如图所示 左下角有一个截图按钮 需要解决那些问题 截图信息需要由游戏引擎提供 SDK获取截图信息为同步 但是Unity引擎没有提 ...
- ASP.NET 上传大文件(原创)
问题描述 需要在网站中上传文件,但是当文件大小太大的时候IIS会拒绝连接,导致用户看到不友好的错误界面. 解决方法 1.服务器端处理 在globle.asax中的protected void Appl ...