java - RabbitMQ 请求响应和消息确认

标签 java spring rabbitmq amqp spring-cloud

我将 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/

相关文章:

spring - 通过curl路由上传到Amazon S3

ffmpeg - 如何使用 FFMPEG、Celery 和 RabbitMQ 在 django 中转码 MP3 文件?

Scala Intellij - Op-Rabbit 语法突出显示问题

java - 处理多个项目时将资源与 gradle 合并的问题

java - 将 "is_deleted"状态字段作为复合主键放在 cassandra 表上进行读取是一种好的做法吗?

java - 如何在 Spring UriComponentsBuilder 中对逗号进行编码?

java - 无多态性的接口(interface)

RabbitMQ消息持久化: difference between lazy queue and persistent delivery mode

java - 如何获取 SortedSet 的下一个元素?

java - 使用QueryDSL消除hibernate hql parser