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的三种方式相关推荐

  1. RabbitMQ(八):SpringBoot 整合 RabbitMQ(三种消息确认机制以及消费端限流)

    说明 本文 SpringBoot 与 RabbitMQ 进行整合的时候,包含了三种消息的确认模式,如果查询详细的确认模式设置,请阅读:RabbitMQ的三种消息确认模式 同时消费端也采取了限流的措施, ...

  2. 远程控制virtual box虚拟机系统的三种方式

    远程控制virtual box虚拟机系统的三种方式[阅读时间:5分钟] 1.使用现有的远程控制软件 2.使用SSH连接 3.使用远程桌面控制虚拟机系统 对于把虚拟机安装在寝室笔记本的人来说,能够远程控 ...

  3. 命令行运行Python脚本时传入参数的三种方式

    三种常用的方式 如果在运行python脚本时需要传入一些参数,例如gpus与batch_size,可以使用如下三种方式. python script.py 0,1,2 10 python script ...

  4. sass文件编译的三种方式【舒】

    [舒:]sass文件编译的三种方式 方式一: 1.webstorm打开evtGulp项目或者mcake-activity项目 2.中,开启gulp->default/develop,启动watc ...

  5. java多线程w3c_Java创建多线程的三种方式

    前言 这篇文章主要讲述线程的概念.组成.Java创建多线程的三种方式以及线程的类型. 线程概念 线程和进程的区别 **进程:**正在运行的程序,例如:你打开 的qq音乐.exe程序,其由PCB(进程控 ...

  6. vue 函数 路由跳转_vue中通过路由跳转的三种方式

    router-view 实现路由内容的地方,引入组件时写到需要引入的地方 需要注意的是,使用vue-router控制路由则必须router-view作为容器. 通过路由跳转的三种方式 1.router ...

  7. linux+Qt 下利用D-Bus进行进程间高效通信的三种方式

    linux+Qt 下利用D-Bus进行进程间高效通信的三种方式 原文链接: https://www.cnblogs.com/wwang/archive/2010/10/27/1862552.html ...

  8. ios 应用和电脑共享文件夹_堪比AirDrop,苹果 iPhone与Windows电脑互传文件的三种方式...

    如果你是苹果全家桶用户,一定会对 「AirDrop(隔空投送)」 功能赞誉有加,使用 AirDrop 可以在 iPhone 与 MacBook.iPad 等设备之间快速传递照片.视频或文件. 遗憾的是 ...

  9. discard connection丢失数据_python kafka 生产者发送数据的三种方式

    python kafka 生产者发送数据的三种方式 发送方式 同步发送 发送数据耗时最长 有发送数据的状态,不会丢失数据,数据可靠性高 以同步的方式发送消息时,一条一条的发送,对每条消息返回的结果判断 ...

最新文章

  1. 祝贺《WCF邮件通信系统》在高阳市场研究汇编第五期发表
  2. DotNET(C#) Socket基本编程 (1)
  3. ORA-19809: 超出了恢复文件数的限制
  4. html焦点试图代码,HTML DOM focus()用法及代码示例
  5. 良好的JavaScript编码风格(语法规则)
  6. lucene7.5的数据结构
  7. axios 请求的配置选项
  8. java 程序命令_命令行运行JAVA程序
  9. 疯狂python讲义pdf_重磅!Python再次第一,Java和C下降,凭什么?
  10. 2019.03.25 bzoj4572: [Scoi2016]围棋(轮廓线dp)
  11. 在内核中分配物理地址连续的大内存.
  12. 一些lightbox插件(弹出层)
  13. 用微信公众号做淘宝优惠券查券搜券和返利机器人的详细配置教程
  14. Word2010经常莫名其妙无法撤销
  15. 用学校邮箱使用微软OneDrive云存储空间5120G
  16. 是时候放弃循环神经网络了
  17. C#和JQ判断移动端还是PC端
  18. Pycharm导入scap包提示出错
  19. 中兴B860AV2.1B电视盒子刷机固件
  20. 【找出耗电大户进行消灭 电池持久有绝招】

热门文章

  1. 母亲确诊的员工发烧 当当网通知全员在家办公
  2. 滴滴医护专车新增南京 共上线6城覆盖1.8万医护
  3. 腾讯32款游戏退市,只因为这个理由!
  4. 网盘用户分享独播剧链接 百度未及时封禁一审被判赔偿百万余元
  5. 京东数科公布11.11一小时战报:白条交易额10秒破亿
  6. 贾跃亭申请破产前收入曝光:还是厉害!
  7. 京东进一步回应“承兴事件”:歌斐自身存在风控缺陷
  8. 阿里最快数周内提交赴港上市申请?回应:不予置评
  9. 暴风集团否认暴风TV公司解散:融资事项正在加紧推进中
  10. 程序员讨厌领导又不想辞职,用一妙招让领导离职,网友:佩服