具有消息队列的生产者,使用者和处理者

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了具有消息队列的生产者,使用者和处理者相关的知识,希望对你有一定的参考价值。

我参与了一个由以下应用程序组成的项目:

  • 生产者应用程序:通过ASP.NET web api从客户端接收消息,并将消息排入消息队列。
  • 消费者应用程序:从上面的消息队列中取消消息,并将消息发送到下面的Handler应用程序。
  • 处理程序应用程序:从消费者应用程序接收消息,并将消息发送到外部应用程序,如果失败,则将它们发送到死队列。

问题是:消费者将消息从队列中排队,并将它们发送给Handler。然后,消费者被阻止(通过使用异步的后台线程)等待Handler的进程。也就是说,Consumer对Handler应用程序执行RPC调用。

如果Handler成功地将消息发送到外部应用程序,或者如果失败,则成功将它们排入死队列,则Consumer将提交队列。 (从队列中删除消息)

如果上述任何一个(外部应用程序或死队列)都失败,则消费者回滚出队(将消息放回队列)

我的问题是

  • 使用Handler应用程序的优缺点是什么,比较消费者执行Handler的逻辑以及消费者当前的逻辑?
  • 删除Handler应用程序是否更好,并将Handler的逻辑集成到Consumer应用程序中?因此,Consumer直接与外部应用程序通信,并处理死队列。少维护的应用程序。
答案

让我们非常清楚:从抽象的意义上讲,你有两个实体 - 生产者和消费者。生产者发送原始消息,消费者处理它。没有必要通过添加关于“处理程序”的细节来混淆水,因为它是消费过程的逻辑部分。

那么你真正的问题(也是我的)似乎是“consumer(你的定义)增加了什么价值?”请记住,没有人直接相互“交谈” - 他们通过消息队列进行通信。在这方面,如果更容易让最终的处理部件直接将消息出列,而不是使用一些中间管道,那么就这样做。

以上是关于具有消息队列的生产者,使用者和处理者的主要内容,如果未能解决你的问题,请参考以下文章

高并发架构系列:MQ消息队列的12点核心原理总结

8-4消息队列pipe

RocketMQ - 如何用死信队列解决消费者异常

消息的主题和队列

使用MQ的益处

MQ消息队列的12点核心原理总结