当前位置: 首页 > news >正文

RabbitMQ运行机制

消息的TTL(Time To Live)

消息的TTL就是消息的存活时间。

• RabbitMQ可以对队列和消息分别设置TTL。

• 对队列设置就是队列没有消费者连着的保留时间,也可以对每一个单独的消息做单独的 设置。超过了这个时间,我们认为这个消息就死了,称之为死信。

• 如果队列设置了,消息也设置了,那么会取小的。所以一个消息如果被路由到不同的队 列中,这个消息死亡的时间有可能不一样(不同的队列设置)。这里单讲单个消息的TTL,因为它才是实现延迟任务的关键。可以通过设置消息的expiration字段或者x- message-ttl属性来设置时间,两者是一样的效果。

 RabbitMQ运行机制

AMQP 中的消息路由

• AMQP 中消息的路由过程和 Java 开 发者熟悉的 JMS 存在一些差别, AMQP 中增加了 Exchange 和 Binding 的角色。生产者把消息发布 到 Exchange 上,消息最终到达队列 并被消费者接收,而 Binding 决定交 换器的消息应该发送到那个队列。

Exchange 类型 

Exchange分发消息时根据类型的不同分发策略有区别,目前共四种类型:direct、fanout、topic、headers 。headers 匹配 AMQP 消息的 header 而不是路由键, headers 交换器和 direct 交换器完全一致,但性能差很多,目前几乎用不到了,所以直接 看另外三种类型:

 

消息中的路由键(routing key)如果和 Binding 中的 binding key 一致, 交换器 就将消息发到对应的队列中。路由键与队 列名完全匹配,如果一个队列绑定到交换 机要求路由键为“dog”,则只转发 routing key 标记为“dog”的消息,不会转发 “dog.puppy”,也不会转发“dog.guard”等等。它是完全匹配、单播的模式。

 

每个发到 fanout 类型交换器的消息都会分到所有绑定的队列上去。fanout 交换器不处理路由键,只是简单的将队列绑定到交换器上,每个发送到交换器的消息都会被转发到与该交换器绑定的所有队列上。很像子网广播,每台子网内的主机都获得了一份复制的消息。fanout 类型转发消息是最快的。

 

topic 交换器通过模式匹配分配消息的路由键属性,将路由键和某个模式进行匹配,此时队列需要绑定到一个模式上。它将路由键和绑定键的字符串切分成单词,这些单词之间用点隔开。它同样也会识别两个通配符:符号“#”和符号“*”。#匹配0个或多个单词,*匹配一个单词。

Docker安装RabbitMQ 

docker run -d --name rabbitmq -p 5671:5671 -p 5672:5672 -p 4369:4369 -p 25672:25672 -p 15671:15671 -p 15672:15672 rabbitmq:management

 4369, 25672 (Erlang发现&集群端口)

5672, 5671 (AMQP端口)

15672 (web管理后台端口)

61613, 61614 (STOMP协议端口)

1883, 8883 (MQTT协议端口)

https://www.rabbitmq.com/networking.html

 

 

http://www.lryc.cn/news/6394.html

相关文章:

  • 【Spring Cloud Alibaba】(三)OpenFeign扩展点实战 + 源码详解
  • 面向对象设计原则
  • 2022年“网络安全”赛项湖南省赛选拔赛 任务书
  • 学习笔记:Java 并发编程⑥_并发工具_JUC
  • Linux文件隐藏属性(修改与显示):chattr和lsattr
  • 广东省基层就业补贴
  • 高压放大器在超声导波钢轨传播中的应用
  • Java字符串常见拼接方式
  • 商城业务:购物车
  • 计算机网络学习笔记(一)
  • 【单目标优化算法】烟花优化算法(Matlab代码实现)
  • 微服务项目【秒杀商品展示及商品秒杀】
  • DIDL3_模型选择、复杂度、过欠拟合的相关概念
  • Android 9.0 去除锁屏界面及SystemUI无sim卡拨打紧急电话控件显示功能实现
  • AntDB-M设计之内存结构
  • 互联网舆情监测公司监测哪些内容,TOOM北京舆情监测公司
  • 一篇文章带你熟练使用Ansible中的playbook
  • HashedWheelTimer
  • OPenCV库移植到ARM开发板子上面配置过程
  • Jenkins实现CI/CD
  • 如何给img标签里的请求添加自定义header
  • Linux系统基本概念操作,用户和文件权限管理
  • 数据库中的单表查询和多表查询
  • 全网详解MyBatis-Plus LambdaQueryWrapper的使用说明以及LambdaQueryWrapper和QueryWapper的区别
  • 暴力破解(new)
  • Android12之apex调试
  • Python - 数字(Number)数据类型常用操作
  • QT(51)-动态链接库-windows
  • [Vivado那些事儿]将自定义 IP (HDL)添加到 Vivado 模块设计(Block Design)
  • 开学必备数码清单,大学生开学必备数码好物分享