Rabbitmq 如何从客户端重试Rabbit MQ中的消息?

Rabbitmq 如何从客户端重试Rabbit MQ中的消息?,rabbitmq,Rabbitmq,如何在消费者拒绝信息或在一段时间后不回复信息后重复向他人发送信息?不包括当前消费者?您可以使用RabbitMQ。成功处理消息后,您的消费者将确认(确认)该消息,然后该消息将从队列中删除。如果在处理消息时触发错误,您可以让消费者NACK(否定确认)消息 您可以将兔子代理配置为具有(DLQ)。一旦消息被标记为NACK,则该消息将被移动到DLQ。此外,您可以为特定队列中的消息设置TTL(生存时间)。如果消息在队列中的长度为TTL,则该消息将移动到DLQ。您可以使用RabbitMQ。成功处理消息后,您的

如何在消费者拒绝信息或在一段时间后不回复信息后重复向他人发送信息?不包括当前消费者?

您可以使用RabbitMQ。成功处理消息后,您的消费者将确认(确认)该消息,然后该消息将从队列中删除。如果在处理消息时触发错误,您可以让消费者NACK(否定确认)消息

您可以将兔子代理配置为具有(DLQ)。一旦消息被标记为NACK,则该消息将被移动到DLQ。此外,您可以为特定队列中的消息设置TTL(生存时间)。如果消息在队列中的长度为TTL,则该消息将移动到DLQ。

您可以使用RabbitMQ。成功处理消息后,您的消费者将确认(确认)该消息,然后该消息将从队列中删除。如果在处理消息时触发错误,您可以让消费者NACK(否定确认)消息

您可以将兔子代理配置为具有(DLQ)。一旦消息被标记为NACK,则该消息将被移动到DLQ。此外,您可以为特定队列中的消息设置TTL(生存时间)。如果消息在队列中的长度为TTL,则该消息将被移动到DLQ。

回调是一个答案 此方法依赖于这样一个事实,即您将使用一些第三方数据存储。 例如,使用Sprint Boot AMQP(java),您应该执行以下操作

1.创建RabbitConfirmCallback
import org.slf4j.Logger;
导入org.slf4j.LoggerFactory;
导入org.springframework.amqp.core.Message;
导入org.springframework.amqp.rabbit.connection.CorrelationData;
导入org.springframework.amqp.rabbit.core.RabbitTemplate;
导入org.springframework.stereotype.Component;
@组成部分
公共类RabbitConfirmCallback实现RabbitTemplate.ConfirmCallback{
私有静态最终记录器Logger=LoggerFactory.getLogger(RabbitConfirmCallback.class);
@凌驾
公共无效确认(CorrelationData CorrelationData,布尔值确认,字符串原因){
if(ack&&correlationData!=null&&correlationData.getId()!=null){
logger.info(“id为“+CorrelationData.getId()+”已确认;”)的CorrelationData;
//TODO保存到某些数据存储信息
//您的数据与此correlationData.getId()关联
//没有成功交付
//你必须再发一次
}否则{
如果(确认){
logger.warn(“收到未知消息确认:“+correlationData”);
}否则{
logger.info(“代理未接受消息:“+原因”);
}
}
}
}
此回调方法
confirm(…)
将在消息传递后触发:是否成功

2.将此回调设置为rabbitmplate
@Autowired
公共作废帖子(RabbitTemplate RabbitTemplate,RabbitConfirmCallback RabbitConfirmCallback){
setConfirmCallback(rabbitConfirmCallback);
}
3.将以下属性添加到
应用程序中。yaml
4.发送消息时,添加CorrelationData
rabbitmplate.convertAndSend(交换、路由密钥、消息、新的相关数据(dataId));
其中,
dataId
可以是您可以理解的回调端标识符

<>强>使用这种方法,考虑一些<代码>最大重试< /代码>设置,以不启动无限循环<强/> /p>回调是一个答案。 此方法依赖于这样一个事实,即您将使用一些第三方数据存储。 例如,使用Sprint Boot AMQP(java),您应该执行以下操作

1.创建RabbitConfirmCallback
import org.slf4j.Logger;
导入org.slf4j.LoggerFactory;
导入org.springframework.amqp.core.Message;
导入org.springframework.amqp.rabbit.connection.CorrelationData;
导入org.springframework.amqp.rabbit.core.RabbitTemplate;
导入org.springframework.stereotype.Component;
@组成部分
公共类RabbitConfirmCallback实现RabbitTemplate.ConfirmCallback{
私有静态最终记录器Logger=LoggerFactory.getLogger(RabbitConfirmCallback.class);
@凌驾
公共无效确认(CorrelationData CorrelationData,布尔值确认,字符串原因){
if(ack&&correlationData!=null&&correlationData.getId()!=null){
logger.info(“id为“+CorrelationData.getId()+”已确认;”)的CorrelationData;
//TODO保存到某些数据存储信息
//您的数据与此correlationData.getId()关联
//没有成功交付
//你必须再发一次
}否则{
如果(确认){
logger.warn(“收到未知消息确认:“+correlationData”);
}否则{
logger.info(“代理未接受消息:“+原因”);
}
}
}
}
此回调方法
confirm(…)
将在消息传递后触发:是否成功

2.将此回调设置为rabbitmplate
@Autowired
公共作废帖子(RabbitTemplate RabbitTemplate,RabbitConfirmCallback RabbitConfirmCallback){
setConfirmCallback(rabbitConfirmCallback);
}
3.将以下属性添加到
应用程序中。yaml
4.发送消息时,添加CorrelationData
rabbitmplate.convertAndSend(交换、路由密钥、消息、新的相关数据(dataId));
其中,
dataId
可以是您可以理解的回调端标识符


<强>使用这种方法,考虑一些<代码> Max Realths<代码>设置,以不启动无限循环<强/> /p>在内存中重试是重要的,或者应该是请求。

spring:
  rabbitmq:
    publisher-confirm-type: correlated