具有消息队列

时间:2018-02-03 12:49:23

标签: rabbitmq message-queue ibm-mq

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

  • 生产者应用程序:通过ASP.NET web api从客户端接收消息,并将消息排入消息队列。

  • 消费者应用程序:从上面的消息队列中取消消息,并将消息发送到下面的Handler应用程序。

  • 处理程序应用程序:从Consumer应用程序接收消息,并将消息发送到外部应用程序,如果失败,则将它们发送到死队列。

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

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

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

我的问题是

  • 使用Handlers应用程序的优缺点是什么,比较消费者执行处理程序的逻辑以及消费者当前的逻辑?

  • 删除Handler应用程序是否更好,并将Handler的逻辑集成到Consumer应用程序中?因此,Consumer直接与外部应用程序通信,并处理死队列。少维护的应用程序。

1 个答案:

答案 0 :(得分:0)

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

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