RabbitMQ - About ExchangeTypes

总结一下几种ExchangeTypes。

之前写发布/订阅模式时第一次提到了exchange type。

即producer不是将消息直接放到队列中,而是先到exchange中,exchange主要用于控制消息到队列的路由,根据具体的exchange type将消息传给需要的队列或者直接废弃。

在这一篇中总结一下那些用到的exchange type。

一.direct exchange

direct exchange算是最基本的了。

direct exchange用于将带上routing key的消息传值拥有相同routing key的队列中。

当我们想用一个简单的标识符区别所有传入同一个exchange中的消息时direct exchange就非常合适。

二.Fanout Exchange

fanout和routing key无关,它将消息无差别地(indiscriminately)传送给所有队列。

fanout exchange通常用于发布/订阅模式。

将消息传送给不同的队列,不同的队列对同一种消息采取不同的行为。

比如,现在有一个客户订单消息被三个队列接收,队列1完成该订单,队列2将订单写入日志,队列3将订单发给别的部门什么的。

三.Topic Exchange

如果根据topic exchange用法说明其特征的话反而更麻烦。

topic exchange正如其名,就是根据某种主题而不是特定的标题,也就是可以匹配routing key的一部分或者全部。

topic exchange的routing key可以有多个词组成,词用‘.‘分隔。

routing key中可以包括‘*‘或者‘#‘,‘*‘表示一个词,‘#‘表示0~N个词。

比如消息发布时routing key为"honda.civic.navy",

能接收消息的队列的routing key可以是"honda.civic.navy"或"*.civic.*"或"honda.#"或"#",

但不能是"honda.accord.navy"或"honda.accord.silver"或"*.accord.*"或"ford.#"。

四.Headers Exchange

即消息头和队列中声明的消息头匹配时可以通信。

就可以定义多个条件进行匹配这一点来说,header exchange和topic exchange有些相似,但它根本不依赖routing key,而是用一组KV的形式进行匹配。

(ps:图不错,向原作者致敬。)

RabbitMQ - About ExchangeTypes,布布扣,bubuko.com

时间: 2024-10-03 22:32:15

RabbitMQ - About ExchangeTypes的相关文章

RabbitMQ - Publish/Subscribe in Java

这次我们试试publish / subscribe模式, 也就是将一个消息发送给多个consumer. 这里用一个简单的小程序来说明publish / subscribe. 由一个provider提供消息,这个消息会被多个consumer接收. consumer对同一个消息做出不同的反应,比如打印.保存到文件.数据库什么的. 之前的例子可能会给人这种感觉: producer将消息发送到队列中,消息缓冲在队列中,consumer从队列获得消息. 但这并不正确. 在rabbit中,producer从

Java SpringBoot集成RabbitMq实战和总结

目录 交换器.队列.绑定的声明 关于消息序列化 同一个队列多消费类型 注解将消息和消息头注入消费者方法 关于消费者确认 关于发送者确认模式 消费消息.死信队列和RetryTemplate RPC模式的消息(不常用) 关于消费模型 关于RabbitMq客户端的线程模型 在公司里一直在用RabbitMQ,由于api已经封装的很简单,关于RabbitMQ本身还有封装的实现没有了解,最近在看RabbitMQ实战这本书,结合网上的一些例子和spring文档,实现了RabbitMQ和spring的集成,对着

RabbitMQ踩坑记

之前我们给我们的系统加了一个使用SpringAOP+RabbitMQ+WebSocket进行实时消息通知功能(https://www.cnblogs.com/little-sheep/p/9934887.html).在测试环境下没有问题,但上到生产环境后部分用户反映出现了丢消息的情况,针对这个问题我们进行了排查,发现,原本我们的系统是单机的,但用户在之前做了调整,在内外网服务器分别部署了系统,两个服务器都公用一个RabbitMQ.那么问题就来了. 之前生产者向Exchange生产消息,消费者从q

SpringBoot整合RabbitMQ,实现消息发送和消费

下载安装Erlang和RabbitMQ Erlang和RabbitMQ:https://www.cnblogs.com/theRhyme/p/10069611.html 项目创建和依赖 推荐SpringCloud项目在线创建:https://start.spring.io/ 不用上面这个也行,下面有代码和依赖: gradle的依赖,和maven差不多: buildscript { ext { springBootVersion = '2.1.1.RELEASE' } repositories {

RabbitMQ指南之三:发布/订阅模式(Publish/Subscribe)

在上一章中,我们创建了一个工作队列,工作队列模式的设想是每一条消息只会被转发给一个消费者.本章将会讲解完全不一样的场景: 我们会把一个消息转发给多个消费者,这种模式称之为发布-订阅模式. 为了阐述这个模式,我们将会搭建一个简单的日志系统,它包含两种程序:一种发送日志消息,另一种接收并打印日志消息.在这个日志系统里,每一个运行的消费者都可以获取到消息,在这种情况下,我们可以实现这种需求:一个消费者接收消息并写入磁盘,另一个消费者接收消息并打印在电脑屏幕上.简单来说,生产者发布的消息将会以广播的形式

RabbitMQ指南之五:主题交换器(Topic Exchange)

在上一章中,我们完善了我们的日志系统,用direct交换器替换了fanout交换器,使得我们可以有选择性地接收消息.尽管如此,仍然还有限制:不能基于多个标准进行路由.在我们的日志系统中,我们可能不仅希望根据日志等级订阅日志,还希望根据日志来源订阅日志.这个概念来自于unix工具syslog,它不仅可以根据日志等级(info/warn/crit...)来路由日志,同时还可以根据设备(auth/cron/kern...)来路由日志.这将更加灵活,我们可能希望只监听来自'cron'的error级别日志

RabbitMQ之Topic交换器模式下开发

Topic交换器,即主题模式,进行规则匹配. 一.Provider 配置文件 1 spring.application.name=provider 2 spring.rabbitmq.host=192.168.50.30 3 spring.rabbitmq.port=5672 4 spring.rabbitmq.username=rabbit 5 spring.rabbitmq.password=rabbit 6 #设置交换器名称 7 mq.config.exchange=log.topic 代

RabbitMQ之Fanout交换器模式开发

Fanout模式,即广播模式,一个发送到交换机的消息会被转发到与该交换机绑定的所有队列上. 一.Provider 配置文件 1 spring.application.name=provider 2 spring.rabbitmq.host=192.168.50.30 3 spring.rabbitmq.port=5672 4 spring.rabbitmq.username=rabbit 5 spring.rabbitmq.password=rabbit 6 #设置交换器的名称 7 mq.con

RabbitMQ的基本介绍及与Spring整合

一,场景回顾 ? 最近做电商购物项目,在分布式中搜索服务,商品详情服务都是独立的模块.那么有一个问题就是: 商品的原始数据保存在数据库中,增删改查都在数据库中完成. 搜索服务数据来源是索引库,如果数据库商品发生变化,索引库数据不能及时更新. 商品详情做了页面静态化,静态页面数据也不会随着数据库商品发生变化. ? 如果我们在后台修改了商品的价格,搜索页面和商品详情页显示的依然是旧的价格,这样显然不对.该如何解决? ? 通常有两种解决方案: 方案1:每当后台对商品做增删改操作,同时要修改索引库数据及