Rabbitmq的三种方式
Direct交换器
是一种点对点,实现发布/订阅标准的交换器。Producer发送消息到RabbitMQ中,MQ中的Direct交换器接受到消息后,会根据Routing Key来决定这个消息要发送到哪一个队列中。Consumer则负责注册一个队列监听器,来监听队列的状态,当队列状态发生变化时,消费消息。注册队列监听需要提供交换器信息,队列信息和路由键信息。
这种交换器通常用于点对点消息传输的业务模型中。如电子邮箱。
producer全局配置文件
spring.application.name=direct-producer
# 必要配置
# 配置rabbitmq链接相关信息。key都是固定的。是springboot要求的。
# rabbitmq安装位置
spring.rabbitmq.host=192.168.1.29
# rabbitmq的端口
spring.rabbitmq.port=5672
# rabbitmq的用户名
spring.rabbitmq.username=xxf
# rabbitmq的用户密码
spring.rabbitmq.password=123456
# 可选配置
# 配置producer中操作的Queue和Exchange相关信息的。key是自定义的。为了避免硬编码。
# exchange的命名。交换器名称可以随意定义。
mq.config.exchange=log.direct
# 路由键, 是定义某一个路由键。 info级别日志使用的queue的路由键。
mq.config.queue.info.routing.key=log.info.routing.key
# 路由键,error级别日志使用的queue的路由键。
mq.config.queue.error.routing.key=log.error.routing.key
Consumer全局配置
spring.application.name=direct-consumer
server.port=8081
spring.rabbitmq.host=192.168.1.29
spring.rabbitmq.port=5672
spring.rabbitmq.username=xxf
spring.rabbitmq.password=123456
# 自定义配置。 配置交换器exchange、路由键routing-key、队列名称 queue name
# 交换器名称
mq.config.exchange=log.direct
# info级别queue的名称
mq.config.queue.info=http://log.info
# info级别的路由键
mq.config.queue.info.routing.key=log.info.routing.key
# error级别queue的名称
mq.config.queue.error=log.error
# error级别的路由键
mq.config.queue.error.routing.key=log.error.routing.key
Topic交换器
主题交换器,也称为规则匹配交换器。是通过自定义的模糊匹配规则来决定消息存储在哪些队列中。当Producer发送消息到RabbitMQ中时,MQ中的交换器会根据路由键来决定消息应该发送到哪些队列中。Consumer同样是注册一个监听器到队列,监听队列状态,当队列状态发生变化时,消费消息。注册监听器需要提供交换器信息,队列信息和路由键信息。
Fanout交换器
广播交换器。这种交换器会将接收到的消息发送给绑定的所有队列中。当Producer发送消息到RabbitMQ时,交换器会将消息发送到已绑定的所有队列中,这个过程交换器不会尝试匹配路由键,所以消息中不需要提供路由键信息。Consumer仍旧注册监听器到队列,监听队列状态,当队列状态发生变化,消费消息。注册监听器需要提供交换器信息和队列信息。
RabbitMQ消息可靠性处理
前面内容,如果consumer未启动,而producer发送了消息。则消息会丢失。
如果consumer先启动,创建queue后,producer发送消息可以正常消费。那么当所有的consumer宕机的时候,queue会auto-delete,消息仍旧会丢失。
这种情况,消息不可靠。有丢失的可能。
Rabbitmq的消息可靠性处理,分为两部分。
1 - 消息不丢失。当consumer全部宕机后,消息不能丢失。 持久化解决
2 - 消息不会错误消费。当consumer获取消息后,万一consumer在消费消息的过程中发生了异常,如果rabbitmq一旦发送消息给consumer后立刻删除消息,也会有消息丢失的可能。 确认机制解决
消息持久化
@Queue注解中的属性 - autoDelete:当所有消费客户端连接断开后,是否自动删除队列 。true:删除 false:不删除
@Exchange注解中的属性 - autoDelete:当交换器所有的绑定队列都不再使用时,是否自动删除交换器。true:删除 false:不删除
有帮助到你的点赞、收藏和关注一下吧
需要更多教程,微信扫码即可
Rabbitmq的三种方式相关推荐
- RabbitMQ(八):SpringBoot 整合 RabbitMQ(三种消息确认机制以及消费端限流)
说明 本文 SpringBoot 与 RabbitMQ 进行整合的时候,包含了三种消息的确认模式,如果查询详细的确认模式设置,请阅读:RabbitMQ的三种消息确认模式 同时消费端也采取了限流的措施, ...
- 远程控制virtual box虚拟机系统的三种方式
远程控制virtual box虚拟机系统的三种方式[阅读时间:5分钟] 1.使用现有的远程控制软件 2.使用SSH连接 3.使用远程桌面控制虚拟机系统 对于把虚拟机安装在寝室笔记本的人来说,能够远程控 ...
- 命令行运行Python脚本时传入参数的三种方式
三种常用的方式 如果在运行python脚本时需要传入一些参数,例如gpus与batch_size,可以使用如下三种方式. python script.py 0,1,2 10 python script ...
- sass文件编译的三种方式【舒】
[舒:]sass文件编译的三种方式 方式一: 1.webstorm打开evtGulp项目或者mcake-activity项目 2.中,开启gulp->default/develop,启动watc ...
- java多线程w3c_Java创建多线程的三种方式
前言 这篇文章主要讲述线程的概念.组成.Java创建多线程的三种方式以及线程的类型. 线程概念 线程和进程的区别 **进程:**正在运行的程序,例如:你打开 的qq音乐.exe程序,其由PCB(进程控 ...
- vue 函数 路由跳转_vue中通过路由跳转的三种方式
router-view 实现路由内容的地方,引入组件时写到需要引入的地方 需要注意的是,使用vue-router控制路由则必须router-view作为容器. 通过路由跳转的三种方式 1.router ...
- linux+Qt 下利用D-Bus进行进程间高效通信的三种方式
linux+Qt 下利用D-Bus进行进程间高效通信的三种方式 原文链接: https://www.cnblogs.com/wwang/archive/2010/10/27/1862552.html ...
- ios 应用和电脑共享文件夹_堪比AirDrop,苹果 iPhone与Windows电脑互传文件的三种方式...
如果你是苹果全家桶用户,一定会对 「AirDrop(隔空投送)」 功能赞誉有加,使用 AirDrop 可以在 iPhone 与 MacBook.iPad 等设备之间快速传递照片.视频或文件. 遗憾的是 ...
- discard connection丢失数据_python kafka 生产者发送数据的三种方式
python kafka 生产者发送数据的三种方式 发送方式 同步发送 发送数据耗时最长 有发送数据的状态,不会丢失数据,数据可靠性高 以同步的方式发送消息时,一条一条的发送,对每条消息返回的结果判断 ...
最新文章
- 祝贺《WCF邮件通信系统》在高阳市场研究汇编第五期发表
- DotNET(C#) Socket基本编程 (1)
- ORA-19809: 超出了恢复文件数的限制
- html焦点试图代码,HTML DOM focus()用法及代码示例
- 良好的JavaScript编码风格(语法规则)
- lucene7.5的数据结构
- axios 请求的配置选项
- java 程序命令_命令行运行JAVA程序
- 疯狂python讲义pdf_重磅!Python再次第一,Java和C下降,凭什么?
- 2019.03.25 bzoj4572: [Scoi2016]围棋(轮廓线dp)
- 在内核中分配物理地址连续的大内存.
- 一些lightbox插件(弹出层)
- 用微信公众号做淘宝优惠券查券搜券和返利机器人的详细配置教程
- Word2010经常莫名其妙无法撤销
- 用学校邮箱使用微软OneDrive云存储空间5120G
- 是时候放弃循环神经网络了
- C#和JQ判断移动端还是PC端
- Pycharm导入scap包提示出错
- 中兴B860AV2.1B电视盒子刷机固件
- 【找出耗电大户进行消灭 电池持久有绝招】