MassTransit、RabbitMQ - FIFO 出队支持
MassTransit, RabbitMQ - FIFO dequeue support
我试图证明 MassTransit 以与 rabbitmq 接收消息相同的顺序 (FIFO) 传送消息。到目前为止,我没有运气。 MT 似乎随机地从队列中传递消息。我尝试将这两个总线配置选项设置为 1:
SetConcurrentReceiverLimit()
SetConcurrentConsumerLimit()
...好像没什么区别
如何确保通过 MassTransit 进行 FIFO 交付?
您还需要使用 RabbitMQ 设置预取。 MassTransit capping message rates at 10 显示了在队列 URI 上使用预取配置的示例。
如果您将 ConcurrentConsumerLimit 设置为 1(接收方限制默认为 1),并在 URI 上设置 prefetch=1,它应该按顺序进行 FIFO 交付(假设没有)抛出消费者异常。老实说,即使预取 > 1(出于性能原因这很重要),它也应该是有序的。
此外,如果您使用一些示例代码执行此操作,post 示例代码并确保您的生产者和消费者进程正在侦听不同的队列。
x.ReceiveFrom(uri) // uri should be unique per bus instance
我试图证明 MassTransit 以与 rabbitmq 接收消息相同的顺序 (FIFO) 传送消息。到目前为止,我没有运气。 MT 似乎随机地从队列中传递消息。我尝试将这两个总线配置选项设置为 1:
SetConcurrentReceiverLimit() SetConcurrentConsumerLimit()
...好像没什么区别
如何确保通过 MassTransit 进行 FIFO 交付?
您还需要使用 RabbitMQ 设置预取。 MassTransit capping message rates at 10 显示了在队列 URI 上使用预取配置的示例。
如果您将 ConcurrentConsumerLimit 设置为 1(接收方限制默认为 1),并在 URI 上设置 prefetch=1,它应该按顺序进行 FIFO 交付(假设没有)抛出消费者异常。老实说,即使预取 > 1(出于性能原因这很重要),它也应该是有序的。
此外,如果您使用一些示例代码执行此操作,post 示例代码并确保您的生产者和消费者进程正在侦听不同的队列。
x.ReceiveFrom(uri) // uri should be unique per bus instance