【发布时间】:2018-07-13 19:57:42
【问题描述】:
我参与了一个由以下应用组成的项目:
Producer 应用程序:通过 ASP.NET Web api 接收来自客户端的消息,并将消息排入消息队列。
消费者应用程序:从上面的消息队列中取出消息,并将消息发送到下面的Handler应用程序。
Handler 应用程序:从 Consumer 应用程序接收消息,并将消息发送到外部应用程序,如果失败,将它们发送到死队列。
问题是: 消费者从队列中取出消息,并将它们发送给处理程序。然后消费者被阻塞(通过使用异步的后台线程)等待处理程序的进程。即 Consumer 对 Handler 应用进行 RPC 调用。
如果 Handler 成功地将消息发送到外部应用程序,或者如果失败,则成功地将它们排入死队列,Consumer 提交出队。 (从队列中删除消息)
如果上述两个(外部应用程序或死队列)中的任何一个都失败,则消费者回滚出队(将消息放回队列)
我的问题是
使用Handlers app的优缺点是什么,比较Consumer执行Handler的逻辑和Consumer当前的逻辑?
是不是可以把Handler应用去掉,把Handler的逻辑集成到Consumer应用?因此消费者直接与外部应用程序对话,并处理死队列。需要维护的应用程序少了一个。
【问题讨论】:
-
我没有看到任何将处理程序和消费者应用程序分开的优点。给定一个事实,通过在 MQ 消息传递之上构建 RPC 调用,您唯一拥有的就是带有额外 RPC 问题的消息传递。使用 MQ 或 RPC。
标签: rabbitmq message-queue ibm-mq