【问题标题】:C# - ActiveMQ - Task in ConsumerC# - ActiveMQ - 消费者中的任务
【发布时间】:2020-09-30 06:21:42
【问题描述】:

假设我们在 ActiveMQ 中有一个队列,一个向该队列发送消息(生产者)的客户端和一个从队列中获取消息(消费者)的服务器。

在服务器端,消费者有一个消息监听器,例如:

consumer.Listener += ConsumerOnListener;

ConsumerOnListener 的实现如下所示:

private void ConsumerOnListener(IMessage message)
{
     var textMessage = message as ITextMessage;
     // validate textMessage

     // more code here...eg. save to databse,logging etc. (part-a)

     Task.Factory.StartNew(() =>
     { 
         // do something else here (part-b)
     });
}

上面的主要思想是在处理下一条消息之前不要等待part-b执行。想象一下,part-b 完全独立地做了一些事情,可能成功也可能失败(即发即弃)。

所以,这里的问题是是否可以在 ConsumerOnListener 中使用 Tasks。这会以某种方式 “阻塞”队列?

【问题讨论】:

    标签: c# .net activemq


    【解决方案1】:

    假设Task 是异步的,那么它不应该阻塞侦听器的执行或队列本身。通常,通过简单地增加消费者/侦听器的数量来增加此类用例中的并发性,但让侦听器启动自己的异步线程、任务等也是有效的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-06
      • 2012-04-13
      • 2012-04-18
      • 2021-12-02
      • 2012-12-24
      • 1970-01-01
      • 2021-03-06
      相关资源
      最近更新 更多