Rabbitmq 使用更新的属性重新查询Spring amqp消息

Rabbitmq 使用更新的属性重新查询Spring amqp消息,rabbitmq,spring-amqp,spring-rabbit,Rabbitmq,Spring Amqp,Spring Rabbit,我有一个用例,我必须使用更新的属性对消息重新排队,消息正在重新排队,但消息属性没有更新 public class TestListener implements MessageListener{ @Override public void onMessage(Message arg0) { MessageProperties properties = arg0.getMessageProperties(); int count = properties.getMessage

我有一个用例,我必须使用更新的属性对消息重新排队,消息正在重新排队,但消息属性没有更新

public class TestListener implements MessageListener{


@Override
public void onMessage(Message arg0) {

    MessageProperties properties = arg0.getMessageProperties();
    int count = properties.getMessageCount();
    System.out.println(count);
    properties.setMessageCount(++count);
    throw new AmqpException("test");
}

但是count的值始终打印为0,这是不行的-amqp协议不支持在拒绝消息时发送数据

您必须自己重新发布消息,例如使用
rabbitmplate.send()
调用


您也不应将“系统”财产用于自己的目的;使用
messageGetProperties().set(“myHeader”,count++)

您不能这样做-amqp协议不支持在拒绝消息时发回数据

您必须自己重新发布消息,例如使用
rabbitmplate.send()
调用


您也不应将“系统”财产用于自己的目的;使用
messageGetProperties().set(“myHeader”,count++)

在header中添加自定义属性没有帮助,因为我们正在获取相同的值。我有一个用例,我们需要根据某个API调用的状态多次请求消息,即公共类TestListener实现MessageListener{@Override public void onMessage(message arg0){Byte[]arr=arg0.getBody();String someValue=new String(arr);//如果请求消息失败,进行一些API调用(此逻辑应该尝试几次)否则向前移动正如我所说的,您不能在拒绝消息的同时修改消息,您必须重新发布它。
messageCount
属性是一个特殊的只读属性。使用
rabbitmplate.receive()时
methods,它是对队列中消息数量的估计。它不是为消息侦听器填充的。您需要使用自定义标头,并且您需要自己重新发布消息,您不能拒绝它(如果您想修改它)。在标头中添加自定义属性没有帮助,因为我们正在获取相同的值。我有一个用例,我们需要根据某个API调用的状态多次请求消息,即公共类TestListener实现MessageListener{@Override public void onMessage(message arg0){Byte[]arr=arg0.getBody();String someValue=new String(arr);//如果请求消息失败,则进行一些API调用(此逻辑应尝试几次)否则向前移动正如我所说的,您不能在拒绝消息的同时修改消息,您必须重新发布它。
messageCount
属性是一个特殊的只读属性。使用
rabbitmplate.receive()时
methods,它是对队列中消息数量的估计。它不是为消息侦听器填充的。您需要使用自定义标头,并且您需要自己重新发布消息,您不能拒绝它(如果您想修改它)。