【发布时间】: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。这会以某种方式 “阻塞”队列?
【问题讨论】: