RabbitMQ中的立即标志

RabbitMQ中的立即标志,rabbitmq,Rabbitmq,我有一个使用API的客户端。API向rabbitmq发送消息。兔子对工人们说 如果出现问题,我应该回复客户机-消息没有路由到某个队列,并且此时无法获取执行(完全确认) 5-10秒后开始的任务没有意义 适当地,我必须使用强制和立即标志。 我不能增加工作人员的数量,我不能在其他服务器上运行工作人员。这是一个要求 因此,正如我发现的那样,立即标志自rabbitmq v.3.0x以来就不受支持 rabbitmq的开发人员建议改为使用TTL=0作为队列,但这样我将无法检查消息的状态 是否有机会改变这种行为

我有一个使用API的客户端。API向rabbitmq发送消息。兔子对工人们说

如果出现问题,我应该回复客户机-消息没有路由到某个队列,并且此时无法获取执行(完全确认) 5-10秒后开始的任务没有意义

适当地,我必须使用强制和立即标志。 我不能增加工作人员的数量,我不能在其他服务器上运行工作人员。这是一个要求

因此,正如我发现的那样,立即标志自rabbitmq v.3.0x以来就不受支持 rabbitmq的开发人员建议改为使用TTL=0作为队列,但这样我将无法检查消息的状态

是否有机会改变这种行为?请分享你解决类似问题的经验

谢谢。

我不确定,但在阅读了您的俄语原始问题后,您可能希望同时使用publisher和consumer confirms。见本答复的最后三段

当您希望从工作人员处获取已发布消息的消息结果时,看起来RPC模式就是您想要的。看见选择一个你最熟悉的编程语言部分,整体概念是一样的。你可能也会发现这很有用

它与
立即
标记功能不同,但如果您的所有发布者都使用
立即
场景,则AMQP协议可能不是此类任务的最佳选择。“立即”的意思是“立即发送此消息或在地狱中烧掉”,当您发布的内容超出您的处理能力时,可能会出现这种情况。在这种情况下,RPC+响应超时可能是应用程序端的一个好选择(例如套接字超时)。但当消息仍在处理时,它不适用于非幂等RPC调用,所以您可能需要使用(或设置)。万一有消息,你们可以在那个里找到它(以防你们出于某种原因需要它)

TL;DR

至于“某物”可能出错,它可能在不同的层面上出错,为了简单起见,我们将其定义为:

  • RabbitMQ之前,如发送应用程序失败和网络问题
  • 在RabbitMQ内部,例如,错过目标队列、消息超时、队列长度限制、一些硬的和意外的内部错误
  • 在RabbitMQ之后,在大多数情况下-消息处理应用程序错误或某些第三方服务(如数据持久性或缓存层中断)
一些错误,如网络中断或硬件错误,是有点史诗般的,不是本q/a的主题

保证消息传递的典型场景是使用或事务(速度较慢)。在您得到确认后,这意味着RabbitMQ收到了您的消息,并且如果它在队列中放置了路由。如果不是,则删除它,或者如果使用
basic.return
方法返回
强制
标志集

对于消费者来说,这是类似的-在
basic.consumer
/
basic.get
之后,客户端确认它认为已接收并从队列中删除的消息

因此,当您在两端使用确认时,您可以避免消息丢失(我们不会遇到RabbitMQ本身可能存在某些错误的情况)。

我不确定,但在阅读了您最初的俄语问题后,您可能希望同时使用发布者和消费者确认。见本答复的最后三段

当您希望从工作人员处获取已发布消息的消息结果时,看起来RPC模式就是您想要的。看见选择一个你最熟悉的编程语言部分,整体概念是一样的。你可能也会发现这很有用

它与
立即
标记功能不同,但如果您的所有发布者都使用
立即
场景,则AMQP协议可能不是此类任务的最佳选择。“立即”的意思是“立即发送此消息或在地狱中烧掉”,当您发布的内容超出您的处理能力时,可能会出现这种情况。在这种情况下,RPC+响应超时可能是应用程序端的一个好选择(例如套接字超时)。但当消息仍在处理时,它不适用于非幂等RPC调用,所以您可能需要使用(或设置)。万一有消息,你们可以在那个里找到它(以防你们出于某种原因需要它)

TL;DR

至于“某物”可能出错,它可能在不同的层面上出错,为了简单起见,我们将其定义为:

  • RabbitMQ之前,如发送应用程序失败和网络问题
  • 在RabbitMQ内部,例如,错过目标队列、消息超时、队列长度限制、一些硬的和意外的内部错误
  • 在RabbitMQ之后,在大多数情况下-消息处理应用程序错误或某些第三方服务(如数据持久性或缓存层中断)
一些错误,如网络中断或硬件错误,是有点史诗般的,不是本q/a的主题

保证消息传递的典型场景是使用或事务(速度较慢)。在您得到确认后,这意味着RabbitMQ收到了您的消息,并且如果它在队列中放置了路由。如果不是,则删除它,或者如果使用
basic.return
方法返回
强制
标志集

对于消费者来说,这是类似的-在
basic.consumer
/
basic.get
之后,客户端确认它认为已接收并从队列中删除的消息


因此,当您在两端使用confirms时,您可以避免消息丢失(我们不会遇到RabbitMQ本身可能存在某些错误的情况)。

Bogdan,感谢您的回复。 看来,我把我的想法表达得够清楚了

这个计划可能是这样的。系统的每个组件都必须执行它必须执行的操作:) 一个想法是使每个组件都更简单

如何执行任务。 客户端通过请求转到HTTP-API,并且必须获得响应li