spring-rabbitmq的配置是这样的
<groupId>org.springframework.amqp</groupId>
<artifactId>spring-rabbit</artifactId>
<version>1.1.3.RELEASE</version>
我想取消一个消费者,使用 channel.basicCannel(consumerTag)
当我使用 ChannelAwareMessageListener
在spring-rabbitmq 2.x版本中。consumerTag
融入 MessageProperties
但我的在线服务使用的是1.x版本,没有任何的 consumerTag
在 MessageProperties
所以我不能使用basicCancel api。
我的完整监听代码如下
public class RPCListener implements ChannelAwareMessageListener {
private static final Logger log = LoggerFactory.getLogger(RPCListener.class);
@Autowired
private MessagePropertiesConverter messagePropertiesConverter;
private MessageConverter messageConverter = new SimpleMessageConverter();
@Autowired
private AmqpTemplate amqpTemplate;
private Boolean flag = false;
@Override
public void onMessage(Message message, Channel channel) throws Exception {
try {
log.error("DeliveryTag(): {}", message.getMessageProperties().getDeliveryTag());
if (flag) {
log.error("canceling....");
//If true, messages will be requeued and possibly
channel.basicRecover(true);
// there is no consumerTag property in MessageProperties
//channel.basicCancel(message.getMessageProperties().getConsumerTag());
return;
}
amqpTemplate.send(message.getMessageProperties().getReplyTo(), message);
channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
} catch (Exception e) {
e.printStackTrace();
}
}
public Boolean getFlag() {
return flag;
}
public void setFlag(Boolean flag) {
this.flag = flag;
}
}
有什么办法可以得到consumerTag吗?
谢谢大家