小编and*_*ndy的帖子

NServiceBus命令处理程序中的生产者/消费者

因为NServiceBus似乎不支持在消息队列中添加优先级机制,所以我想自己实现这一点。

  • 命令处理程序(生产者):
public void Handle(DoAnAction message)
{
  _messageManager.Insert(message);
}
Run Code Online (Sandbox Code Playgroud)
  • 单个使用者(不同线程):
public void Run()
{
  DoAnAction message;
  while (true) 
  {
    if (_messageManager.TryDequeue(out message)) 
    {
      doALongCall(message);
    }
    else 
    {
      Thread.sleep(200);
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

首先这是一个好主意吗?我不喜欢这样丢失消息的想法。

更新:用例:我们有许多客户可以发送消息DoAnAction。该操作的处理需要一段时间。问题是当1个客户端决定发送200个DoAnAction时,所有其他客户端都必须等待2-3个小时,以便可以处理所有这些消息(FIFO)。相反,我想根据客户端的顺序处理这些消息。

因此,即使客户端A仍有200条消息要处理,当客户端B发送消息时,下一个也会排队。如果客户端B发送3条消息,则队列将如下所示:BA,BA,BA,A,A,A,...

.net c# nservicebus producer-consumer

5
推荐指数
1
解决办法
141
查看次数

标签 统计

.net ×1

c# ×1

nservicebus ×1

producer-consumer ×1