我将 RabbitMQ 与 Java 和 Spring 框架结合使用,并且有一个生产者和一个消费者,两者都将运行多个实例,但是到达生产者的每个请求都会生成一条由消费者处理的消息,并且该消费者应该能够向同一个生产者(与持有请求的生产者完全相同)回复答案。
所以要求是:
- 生产者将收到 HTTP 请求,然后生成一条消息并将其推送到队列。
- 消息内容一次只能由一个消费者处理,其他消费者不得处理同一消息。
- 该消息应等待确认。
- 任何消费者都可以处理消息,但是当消费者失败时,消息应该返回到队列,因为我们需要能够从中恢复。
- 完成后,消费者应该回复与现在持有请求的完全相同的生产者。
- 如果生产者失败,该请求也应该失败,因此消费者应该在回复之前检查生产者是否仍然存在,如果生产者不可用,那么它应该失败。
所以:
请求 --> 生产者1 --> 队列 --> 消费者1
--> Producer1 正在等待
--> Consumer1 失败
-->消息返回队列
--> Consumer2 获取消息并从 1 停止的地方继续
--> Consumer2完成并确认请求消息并发送响应
-->consumer2发现生产者1失败所以需要发送失败信号
目前我能想到的就是: 1.Direct Reply Pattern :但这里的问题是消息没有确认要求,但我需要能够从消费者故障中恢复 2.The RPC Model :这并没有解决生产者失败的问题
还有其他解决办法吗?我这样做错了吗?
最佳答案
看来要实现这个过程我们必须使用Direct-to方式,但我仍然不确定。 一旦找到解决方案,我会通知您。
关于java - RabbitMQ 请求响应和消息确认,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46093072/