rabbitmq 传递文件_使用RabbitMQ进行消息传递

rabbitmq 传递文件

RabbitMQ是一个强大的消息代理,可用于实现不同的消息传递模式。 即使有出色的教程 (使用不同的语言和框架),也很难理解这些概念。 在这篇文章中,我想展示一些可以用RabbitMQ实现的不同范例,以及为什么要为某些概念而苦恼。

使用队列发送和接收

最简单的方法是使用队列发送消息,并让使用者从同一队列中读取数据。

没有什么可以阻止您拥有多个使用者,每个使用者都可以处理队列中的消息。 使用完一条消息后,该消息将从队列中消失。

当具有需要执行的任务并且无论哪个消费者处理任务都无关紧要时,这特别适合。

发布/订阅

并非所有用例都只消耗一条消息的方式。 通常,您希望拥有多个应该全部处理所有消息的使用者。 一个示例可以是将对象存储在不同的数据存储中(例如,搜索索引和数据库),另一种是域事件,例如已提交并应由订单管理系统和库存系统处理的订单。 这需要一种发布/订阅机制,RabbitMQ当然已经涵盖了这一点。

与仅使用队列相比,最大的区别是在这种情况下,生产者不再直接写队列。 一个称为Exchange的实例将接受邮件并将其转发到一个或多个队列。

要使用经典的发布/订阅模型,您可以使用FanoutExchange将消息转发到一个或多个队列。 要连接交换和队列,您需要声明一个绑定,在这种情况下,特定交换的所有消息都应转发到特定队列。

每个使用者都从专用队列中读取消息。 这也意味着您将需要为每个正在监听的使用者绑定一个绑定。

使用RabbitMQ,可以使用在使用者停止监听时自动删除的队列。 这允许消费者加入和离开时具有非常动态的行为。

看我们的第一个示例,您可能想知道为什么有不同的方式来发送消息,发送队列和进行交换。 事实证明,发送到队列确实是不可能的。 总是存在一个默认交换,它仅转发消息。 此默认交换仅获取消息的某个路由键(即队列名称),然后将它们以相同的名称放入队列中。

发布/订阅过滤

除了将消息发送到已注册进行交换的所有队列之外,还可以根据路由密钥对消息进行过滤。 所有消息都被发送到一个交换机,该交换机通过查看路由键来决定将消息发送到哪个队列。

如果您想与路由键完全匹配,请执行DirectExchange。

将DirectExchange绑定到队列时,您需要提供一个路由密钥,该路由密钥将确定将为此队列考虑的路由密钥。 如果要分配多个路由键,则可以为同一队列添加多个绑定。

您还可以提供通配符来确定应将哪些路由密钥用于队列,这可以通过使用需要分层路由密钥的TopicExchange来完成。

一开始,这两个交流-直接交流和主题交流-可能最让我感到困惑。 当涉及到主题时,我正在考虑经典的发布订阅系统,例如使用FanoutExchange时。 交换名称是客户端正在注册的主题。 但是这里的主题是指在现有交换机上的一种路由。 与DirectExchange相同:我希望直接交换类似于第一个直接将消息发送到队列的示例。 但是在这种情况下,直接交换是指直接路由,因此您始终需要为此提供路由密钥。

如果您想进一步了解各种交流,请转到RabbitMQ网站上的教程

翻译自: https://www.javacodegeeks.com/2018/03/messaging-with-rabbitmq-2.html

rabbitmq 传递文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值