是否可以定义一个单独的传奇,将处理许多消息

问题描述 投票:0回答:1

我的团队正在考虑是否可以将大众运输作为RabbitMq(相对于NServiceBus)中Sagas的主要解决方案。我承认,我们对像Masstransit和nserviceBus这样的解决方案的经验很少,我们已经开始将消息传递引入我们的系统。因此,对不起,我的问题很简单,甚至愚蠢。但是,当我查看大众运输文档时,我注意到我不确定是否可以解决我们的一种情况。

案例如下:我们的组件之一将产生多达100条消息,这些消息将被“发送”到队列中。这些消息是系统中单个操作的结果。所有消息都将具有相同的相关ID和我们的内部发布ID(也相同)。

1)是否可以定义单个实例的传奇(通过相关ID),它将等待直到从队列接收到所有消息,然后将它们作为一个批处理?

2)否则,是否有任何解决方案可确保已处理所有发送的消息? (一致性批处理?)我假设相关ID将用作找到现有传奇实例(单例)的一种方式。在理想情况下,我想完成一个saga的实例当系统将处理属于一个组(属于一个出版物)的每条消息时]

我也查看CompositeEvent,但是我不确定是否可以使用它来“确保”处理了每条消息,然后让我为特定的相关ID完成传奇。

您能解释一下如何实现吗?为了将id的许多具有相同id的消息与单个传奇相关联,然后完成(如果将消耗所有msg的话),我应该考虑哪种机制?

感谢您的任何回复

masstransit saga
1个回答
0
投票

能够接收一系列消息然后批量处理这些消息是很常见的情况,以至于有一个示例显示了如何执行此操作:

Batch Sample

每个saga实例都有一个唯一的关联标识符,只要可以将这些消息与该单个实例相关联,MassTransit将管理并发性(乐观或悲观,并取决于saga存储引擎)。

我建议您查看示例中的状态机,并查看其与您的方案的比较。

© www.soinside.com 2019 - 2024. All rights reserved.