目前,我有一个窗口服务使用RabbitMQ来处理来自web应用程序的消息异步。此服务使用消息上的实体ID来查找需要处理的实体。当前的消息没有指明应该对实体做什么,因为这已经由内部操作日志提供了。为了帮助移动到多个竞争的消费者设置,我考虑在RabbitMQ上实现RabbitMQ。
我正在研究如何防止具有相同实体ID的多条消息在不同的消费者上同时被处理。在MassTransit中是否有什么东西可以让我处理这种情况,或者是关于如何处理的建议/资源?
我看过最新的过滤器和绿色管道分区过滤器。它们要么不按我的要求执行,要么在我的测试解决方案中配置错误。我还考虑过对实体设置一个锁,以便2nd+并发尝试处理该实体直到第一次完成,但是如果没有,我真的不想捆绑等待的一个或多个消费者。
发布于 2017-04-04 21:56:18
如果指定密钥提供程序,使其为相同实体返回相同的标识符,则分区程序应该完全满足您的需要。
这个单元测试显示了分区程序是如何设置的:Specs.cs
关键是:
configurator.Consumer(() => new PartitionedConsumer(_completed), x =>
{
x.Message<PartitionedMessage>(m =>
{
m.UsePartitioner(8, context => context.Message.CorrelationId);
});
});https://stackoverflow.com/questions/43207591
复制相似问题