RabbitMQ中的立即标志
我有一个使用API的客户端。API向rabbitmq发送消息。兔子对工人们说 如果出现问题,我应该回复客户机-消息没有路由到某个队列,并且此时无法获取执行(完全确认) 5-10秒后开始的任务没有意义 适当地,我必须使用强制和立即标志。 我不能增加工作人员的数量,我不能在其他服务器上运行工作人员。这是一个要求 因此,正如我发现的那样,立即标志自rabbitmq v.3.0x以来就不受支持 rabbitmq的开发人员建议改为使用TTL=0作为队列,但这样我将无法检查消息的状态 是否有机会改变这种行为?请分享你解决类似问题的经验 谢谢。我不确定,但在阅读了您的俄语原始问题后,您可能希望同时使用publisher和consumer confirms。见本答复的最后三段 当您希望从工作人员处获取已发布消息的消息结果时,看起来RPC模式就是您想要的。看见选择一个你最熟悉的编程语言部分,整体概念是一样的。你可能也会发现这很有用 它与RabbitMQ中的立即标志,rabbitmq,Rabbitmq,我有一个使用API的客户端。API向rabbitmq发送消息。兔子对工人们说 如果出现问题,我应该回复客户机-消息没有路由到某个队列,并且此时无法获取执行(完全确认) 5-10秒后开始的任务没有意义 适当地,我必须使用强制和立即标志。 我不能增加工作人员的数量,我不能在其他服务器上运行工作人员。这是一个要求 因此,正如我发现的那样,立即标志自rabbitmq v.3.0x以来就不受支持 rabbitmq的开发人员建议改为使用TTL=0作为队列,但这样我将无法检查消息的状态 是否有机会改变这种行为
立即
标记功能不同,但如果您的所有发布者都使用立即
场景,则AMQP协议可能不是此类任务的最佳选择。“立即”的意思是“立即发送此消息或在地狱中烧掉”,当您发布的内容超出您的处理能力时,可能会出现这种情况。在这种情况下,RPC+响应超时可能是应用程序端的一个好选择(例如套接字超时)。但当消息仍在处理时,它不适用于非幂等RPC调用,所以您可能需要使用(或设置)。万一有消息,你们可以在那个里找到它(以防你们出于某种原因需要它)
TL;DR
至于“某物”可能出错,它可能在不同的层面上出错,为了简单起见,我们将其定义为:
- RabbitMQ之前,如发送应用程序失败和网络问题李>
- 在RabbitMQ内部,例如,错过目标队列、消息超时、队列长度限制、一些硬的和意外的内部错误李>
- 在RabbitMQ之后,在大多数情况下-消息处理应用程序错误或某些第三方服务(如数据持久性或缓存层中断)
basic.return
方法返回强制
标志集
对于消费者来说,这是类似的-在basic.consumer
/basic.get
之后,客户端确认它认为已接收并从队列中删除的消息
因此,当您在两端使用确认时,您可以避免消息丢失(我们不会遇到RabbitMQ本身可能存在某些错误的情况)。我不确定,但在阅读了您最初的俄语问题后,您可能希望同时使用发布者和消费者确认。见本答复的最后三段
当您希望从工作人员处获取已发布消息的消息结果时,看起来RPC模式就是您想要的。看见选择一个你最熟悉的编程语言部分,整体概念是一样的。你可能也会发现这很有用
它与立即
标记功能不同,但如果您的所有发布者都使用立即
场景,则AMQP协议可能不是此类任务的最佳选择。“立即”的意思是“立即发送此消息或在地狱中烧掉”,当您发布的内容超出您的处理能力时,可能会出现这种情况。在这种情况下,RPC+响应超时可能是应用程序端的一个好选择(例如套接字超时)。但当消息仍在处理时,它不适用于非幂等RPC调用,所以您可能需要使用(或设置)。万一有消息,你们可以在那个里找到它(以防你们出于某种原因需要它)
TL;DR
至于“某物”可能出错,它可能在不同的层面上出错,为了简单起见,我们将其定义为:
- RabbitMQ之前,如发送应用程序失败和网络问题李>
- 在RabbitMQ内部,例如,错过目标队列、消息超时、队列长度限制、一些硬的和意外的内部错误李>
- 在RabbitMQ之后,在大多数情况下-消息处理应用程序错误或某些第三方服务(如数据持久性或缓存层中断)
basic.return
方法返回强制
标志集
对于消费者来说,这是类似的-在basic.consumer
/basic.get
之后,客户端确认它认为已接收并从队列中删除的消息
因此,当您在两端使用confirms时,您可以避免消息丢失(我们不会遇到RabbitMQ本身可能存在某些错误的情况)。Bogdan,感谢您的回复。 看来,我把我的想法表达得够清楚了 这个计划可能是这样的。系统的每个组件都必须执行它必须执行的操作:) 一个想法是使每个组件都更简单 如何执行任务。 客户端通过请求转到HTTP-API,并且必须获得响应li