RabbitMQ在SpringBoot中的应用

1.简单模式

P:生产者,要发送消息的程序.

C:消费者,消息的接收者.

Queue:消息队列,类似于一个邮箱,生产者向其中投递消息,消费者从其中取出消息.

特点:一个生产者P,一个消费者C,消息只能被消费一次,也成为点对点模式.

适用场景:消息只能被单个消费者处理.

设置队列的名称为simple.queue

设置一个叫simple.queue的队列

设置生产者

设置消费者

2.工作队列

一个生产者P,多个消费者C1,C2...消费者从同一个队列中获取信息,消息不会重复,会发送给不同的消费者.使用与在集群环境中做异步处理.

这里使生产者向队列发送10条消息.

设置两个消费者从指定队列中获取消息.

实现的结果如下:

可以看到消费者依次从work.queue这个队列中消费消息,且消息不会重复.

3.发布订阅模式.

这里与前面不同的是,这个图中体现出了,交换机(Exchange)

交换机:生产者首先会将消息发送到Exchange,由交换机将消息按照一定的规则路由到一个或者多个队列中.RabbitMQ交换机有四种类型,fanout,direct,topic,headers,不同类型有着不同的路由策略.Fanout :广播,将消息交给所有绑定到交换机的队列(Publish/Subscribe模式) Direct :定向,把消息交给符合指定routing key的队列(routing模式)Topic: 通配符,把消息交给符合 routing pattern(路由模式)的队列.headers 类型的交换机不依赖与路由键的匹配规则来路由消息,而是根据发送的内容中的headers属性进行匹配,性能较差,基本上不会见到它的存在.**Exchange(交换机),**只负责转发消息,不具备存储消息的能力,因此,如果没有任何队列与Exchange绑定,或者没有符合路由规则的队列,就会导致消息的丢失.

这里介绍的是Publish/Subscribe模式,一个生产者P,多个消费者C1,C2,X表示交换机,这种模式中,生产者P向交换机发送消息,经过交换机,会被路由到Q1,Q2两个队列.消费者C1,C2收到的信息完全相同.这种模式适用于相同消息需要被多个消费者接受的场景

声明队列和声明交换机以及交换机和队列的绑定

发送消息

消费消息.

路由模式:在路由模式的基础上增加路由Key.发布订阅模式是无条件将所有消息分发给所有消费者,路由模式是Exchange根据RoutingKey的规则,将数据筛选后发给对应的消费者队列.使用场景:需要根据特定规则分发消息的场景.

声明队列和声明交换机以及交换机和队列的绑定

发送消息

接收消息

通配符模式.

路由模式的升级版,在routingKey的基础上,增加了通配符的功能,Topic和Routing的基本原理相同,即:生产者将消息发给交换机,交换机根据routingKey将消息转发给与routingKey匹配的队列.不同之处是:routingKey的匹配方式不同,Routing模式是相等匹配,topics模式是通配符匹配.

声明队列和交换机以及队列和交换机的绑定.

发送消息

接收消息:

下面是一个简单的应用.一个物流系统,顾客在把订单发出之后,将订单消息暂存在RabbitMq,之后再转发到商家.

这里实现物流消息的发送与接收.为了方便演示,这里把订单系统和物流系统创建在一个项目中.发送的消息如下:这里发送了两条消息.建立物流系统,对订单消息进行消费:可以看到队列中已经没有消息了.这里尝试发送一个对象,该对象有两个属性商品名和商品ID.

相关推荐
程序员张344 分钟前
SpringBoot计时一次请求耗时
java·spring boot·后端
麦兜*7 小时前
Spring Boot启动优化7板斧(延迟初始化、组件扫描精准打击、JVM参数调优):砍掉70%启动时间的魔鬼实践
java·jvm·spring boot·后端·spring·spring cloud·系统架构
KK溜了溜了8 小时前
JAVA-springboot 整合Redis
java·spring boot·redis
大只鹅8 小时前
解决 Spring Boot 对 Elasticsearch 字段没有小驼峰映射的问题
spring boot·后端·elasticsearch
天河归来8 小时前
使用idea创建springboot单体项目
java·spring boot·intellij-idea
IT_10248 小时前
Spring Boot项目开发实战销售管理系统——数据库设计!
java·开发语言·数据库·spring boot·后端·oracle
武昌库里写JAVA9 小时前
Oracle如何使用序列 Oracle序列使用教程
java·开发语言·spring boot·学习·课程设计
超级小忍10 小时前
Spring Boot 中常用的工具类库及其使用示例(完整版)
spring boot·后端
程序员张310 小时前
SQL分析与打印-p6spy组件
spring boot·sql·mybatis·mybatisplus·p6spy
CHENWENFEIc10 小时前
SpringBoot论坛系统安全测试实战报告
spring boot·后端·程序人生·spring·系统安全·安全测试