Spring AMQP:想将消息放入队列并立即发送ACK
我编写了Java应用程序,它将消息发送到RabbitMQ。 然后Flume从RabbitMQ队列中选择消息。 我感兴趣的是没有人从队列中拉出消息,除了水槽。
我的应用程序使用Spring AMQP Java插件。
问题:
使用下面的代码,消息进入RabbitMQ队列并永远保持“未知状态”。 据我所知,RabbitMQ正在等待来自MessageListener的ACK,但MessageListener绝不会确认。 有谁知道如何解决它?
代码:
public class MyAmqpConfiguration {
@Autowired
ConnectionFactory connectionFactory;
@Bean
public SimpleMessageListenerContainer messageListenerContainer() {
SimpleMessageListenerContainer container = new SimpleMessageListenerContainer(connectionFactory);
container.setQueues(activityLogsQueue());
container.setMessageListener(MyMessageListener());
container.setConcurrentConsumers(3);
return container;
}
@Bean(name="myTemplate")
public RabbitTemplate rabbitTemplate() {
RabbitTemplate template = new RabbitTemplate(connectionFactory);
template.setMessageConverter(MyMessageConverter());
return template;
}
}
public class MyMessageListener implements MessageListener {
public MyMessageListener(MessageConverter converter, MyMessageHandler<MyObject> messageHandler) {
this.converter = converter;
this.messageHandler = messageHandler;
}
@Override
public void onMessage(Message message) {
this.messageHandler.doThings();
}
}
public class MyMessageHandler {
@Autowired
@Qualifier("myTemplate")
RabbitTemplate template;
@Override
public void handleMessage(MyObject thing) {
template.convertAndSend(exchange, routingKey, thing);
}
}
public class MyMessageConverter extends JsonMessageConverter {
@Override
protected Message createMessage(Object object, MessageProperties messageProperties) {
//do things
}
@Override
public Object fromMessage(Message message) throws MessageConversionException {
throw new UnsupportedOperationException("fromMessage is not supported in "+this.getClass().getName());
}
}
如果您不想要确认每条消息,则可以通过在SimpleMessageListenerContainer上设置AcknowledgeMode
container.setAcknowledgeMode(AcknowledgeMode.NONE);
请参阅API参考以获取更多信息。
更新:应该是AcknowledgeMode.NONE
设置为AcknowledgeMode.NONE告诉经纪人不要期待任何确认,并且假定所有消息在发送后立即得到确认(这是以原生Rabbit经纪人条款“自动支付”)。 如果是AcknowledgeMode.NONE,那么通道不能是事务性的(因此如果该标志意外设置,容器将在启动时失败)。
这里是引导阅读解决方案的讨论:
http://forum.springsource.org/showthread.php?129304-Spring-AMQP-would-like-to-put-message-to-queue-and-send-ACK-immediately&p=422064&posted=1#post422064
链接地址: http://www.djcxy.com/p/59641.html上一篇: Spring AMQP: would like to put message to queue and send ACK immediately