RabbitMQ体系结构内部检查

RabbitMQ体系结构内部检查,rabbitmq,message-queue,Rabbitmq,Message Queue,因此,我正在考虑使用RabbitMQ在我们组织中的所有不同应用程序之间发送消息。在所附的图片中,基本上是我脑海中关于事情如何运作的图片 因此,消息进入exchange,并分成三个队列 有效负载总是JSON文本 使用者是长期运行的windows服务,其唯一任务是静坐并侦听发送给其特定应用程序的消息。当消息传入时,他们会查看标头以确定应如何解释此有效负载JSON,以及应将其发送到哪个REST端点。例如。,“当我看到一个'WORK\u ORDER\u COMPLETE'标题时,我将把它解析为WorkO

因此,我正在考虑使用
RabbitMQ
在我们组织中的所有不同应用程序之间发送消息。在所附的图片中,基本上是我脑海中关于事情如何运作的图片

因此,消息进入exchange,并分成三个队列

有效负载总是JSON文本

使用者是长期运行的windows服务,其唯一任务是静坐并侦听发送给其特定应用程序的消息。当消息传入时,他们会查看标头以确定应如何解释此有效负载JSON,以及应将其发送到哪个REST端点。例如。,“当我看到一个
'WORK\u ORDER\u COMPLETE'
标题时,我将把它解析为
WorkOrderCompleteDto
,并将其作为
POST
发送到
timelabor api.mycompany.com
上的CompletedWorkOrder WebAPI方法。如果API返回的不是200,我将拒绝该消息并让rabbit处理它。如果我从API获得200,那么我会将消息确认给rabbit。”

然后,终端应用程序只是我们用于库存、计费等的内部业务线应用程序。然后,这些应用程序负责执行各自的功能(减少库存、创建计费记录,yadda yadda)

这是否有助于明智地理解使用兔子的正确方法


从概念上讲,我相信您可能依赖RabbitMQ来完成应用程序需要完成的事情

该体系结构的假设似乎是,您的每个消费应用程序完全在真空中处理每条消息。这意味着,您不在乎
计费应用程序
成功处理的消息最终在
库存应用程序
中失败。也许这是真的,但根据我的经验,这不是真的

如果最终目标是在整个数据中实现某种一致的状态,那么您将需要一个管理组件来协调和监控各种操作,以确保状态一致。这意味着,实际上,您关于拒绝返回RabbitMQ的消息的声明意味着您需要投入更多的精力当某件事失败时会发生什么


我将重点确定一些UML活动图,这些图描述了您的行为及其如何达到最终状态,并将其用作指导,以确定您的应用程序的编排需要如何设计。

是的。这通常是RabbitMQ的一种典型用法。请注意如何配置交换,以便消息最终以c结尾正确队列。扇出将向所有队列发送垃圾邮件。好的,因此维护应用程序可能会创建一个新的唯一密钥(例如GUID),该密钥是有效负载(或标头)的一部分。当每个使用者的任务成功或失败时,他们可以依次向“事务”消息交换发送消息,最终记录(比如说,在数据库中)事务的每个组件的成功或失败。这些数据可以依次得到警报或报告,这可能会起作用。我很喜欢您正在处理事件的事实->我经常看到的一个巨大错误是处理响应命令,这会使系统处于不一致和不可理解的状态。至少在处理事件时,您总是有办法从失败中恢复过来。