具有消息队列的生产者,使用者和处理者
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了具有消息队列的生产者,使用者和处理者相关的知识,希望对你有一定的参考价值。
我参与了一个由以下应用程序组成的项目:
- 生产者应用程序:通过ASP.NET web api从客户端接收消息,并将消息排入消息队列。
- 消费者应用程序:从上面的消息队列中取消消息,并将消息发送到下面的Handler应用程序。
- 处理程序应用程序:从消费者应用程序接收消息,并将消息发送到外部应用程序,如果失败,则将它们发送到死队列。
问题是:消费者将消息从队列中排队,并将它们发送给Handler。然后,消费者被阻止(通过使用异步的后台线程)等待Handler的进程。也就是说,Consumer对Handler应用程序执行RPC调用。
如果Handler成功地将消息发送到外部应用程序,或者如果失败,则成功将它们排入死队列,则Consumer将提交队列。 (从队列中删除消息)
如果上述任何一个(外部应用程序或死队列)都失败,则消费者回滚出队(将消息放回队列)
我的问题是
- 使用Handler应用程序的优缺点是什么,比较消费者执行Handler的逻辑以及消费者当前的逻辑?
- 删除Handler应用程序是否更好,并将Handler的逻辑集成到Consumer应用程序中?因此,Consumer直接与外部应用程序通信,并处理死队列。少维护的应用程序。
答案
让我们非常清楚:从抽象的意义上讲,你有两个实体 - 生产者和消费者。生产者发送原始消息,消费者处理它。没有必要通过添加关于“处理程序”的细节来混淆水,因为它是消费过程的逻辑部分。
那么你真正的问题(也是我的)似乎是“consumer
(你的定义)增加了什么价值?”请记住,没有人直接相互“交谈” - 他们通过消息队列进行通信。在这方面,如果更容易让最终的处理部件直接将消息出列,而不是使用一些中间管道,那么就这样做。
以上是关于具有消息队列的生产者,使用者和处理者的主要内容,如果未能解决你的问题,请参考以下文章