我正在使用Java和Spring Framework的RabbitMQ,有一个生产者和一个消费者,两者都将有多个实例运行。然而,每个请求来到生产者时都会生成一条消息,由消费者处理,该消费者应该能够回复给同一个生产者(与其持有的请求完全相同)。
所以要求如下:
- 生产者将收到HTTP请求,然后生成一条消息并将其推送到队列中。
- 消息内容只能由一个消费者处理,没有其他消费者应处理相同的消息。
- 该消息应等待确认。
- 任何消费者都可以处理该消息,但当消费者失败时,该消息应返回到队列中,因为我们需要从中恢复。
- 完成后,消费者应向完全相同的生产者回复,因为它现在持有该请求。
- 如果生产者失败,则该请求也应失败,因此消费者应在回复之前检查生产者是否仍然活动,如果不可用,则应失败。
因此:
请求--> Producer1 --> 队列 --> 消费者1
--> Producer1等待
--> 消费者1失败
--> 将消息返回到队列中
--> 消费者2获取消息并继续消费者1的进度
--> 消费者2完成并确认请求消息,发送响应
--> 消费者2发现生产者1已经失败,因此需要发送一个失败信号
目前,我能想到的是: 1. 直接回复模式:但这里的问题是消息没有确认要求,但我需要能够从消费者故障中恢复 2. RPC模型:它没有解决生产者故障的问题
还有其他解决方案吗?我做错了吗?