【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(阿 ...
随机推荐
- nginx实现unigui群集
nginx实现unigui群集 在笔者写此文的时候,UNIGUI1.50.x的版本已经发布,其提供的HyperServer已经支持群集. 有网友还专门为此做了群集方面的测试: 从上图可以看出:群集总共 ...
- 10 个免费的Bootstrap Admin 主题,模板收集
In designing websites today, one of the must have frameworks is the twitter bootstrap. To those who ...
- css中“~”和“>”是什么意思
p~ul选择器 p之后出现的所有ul. 两种元素必须拥有相同的父元素,但是 ul不必直接紧随 p. css中“>”是: css3特有的选择器,A>B 表示选择A元素的所有子B元素. 与A ...
- IIS伪静态配置,使用URLRewriter实现伪静态
前段时间开发公司官网,用到了URLRewriter实现伪静态,在VS调试模式下没有任何问题,部署到IIS上后总是提示404的错误,查了很久才知道IIS需要做相应的配置才能实现动态跳转的功能,现将IIS ...
- 数据库操作类《SqlHelper》
一.背景 在看了一本书叫<Visual Studio 2010(C#)Windows数据库项目开发>后,觉得很多编程技术需要积累,因为一个简单的项目里包含的技术太多了,容易忘记.每次需要用 ...
- oracle 字符串分割函数
首先创建一个类型: CREATE OR REPLACE TYPE str_split IS TABLE OF VARCHAR2 (4000); 创建函数: CREATE OR REPLACE FUNC ...
- 企业项目开发--cookie(1)
此文已由作者赵计刚授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 注:本章代码基于<第五章 企业项目开发--mybatis注解与xml并用>的代码,链接如下: h ...
- Android开发教程 - 使用Data Binding(六)RecyclerView Adapter中的使用
本系列目录 使用Data Binding(一)介绍 使用Data Binding(二)集成与配置 使用Data Binding(三)在Activity中的使用 使用Data Binding(四)在Fr ...
- 【多线程】:Synchronized和ReentrantLock的对比
相同点: 两者都是可重入锁,同一个线程每进入一次,锁的计数器都自增1,等到锁的计数器下降为0时才能释放锁. 底层实现对比: Synchronized是依赖于JVM实现的,而ReentrantLock是 ...
- h5文字超出,两行显示,超出显示省略号
最近接到一个需求,要求商场导航里的文字最多显示两行,超出两行的省略号显示,查一些资料,又根据自己的需求,改了很多,直接上代码吧 <html> <head> <style ...