Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring AMQP:希望将消息放入队列并立即发送ACK_Java_Spring_Rabbitmq_Amqp_Spring Amqp - Fatal编程技术网

Java Spring AMQP:希望将消息放入队列并立即发送ACK

Java Spring AMQP:希望将消息放入队列并立即发送ACK,java,spring,rabbitmq,amqp,spring-amqp,Java,Spring,Rabbitmq,Amqp,Spring Amqp,我编写了Java应用程序,它向RabbitMQ发送消息。 然后Flume从RabbitMQ队列中拾取消息。 我感兴趣的是,除了flume,没有人从队列中提取消息 我的应用程序使用Spring AMQP Java插件 问题是: 使用下面的代码,消息将进入RabbitMQ队列并永远保持“未确认”。 据我所知,RabbitMQ正在等待MessageListener的确认,但MessageListener永远不会确认。 有人知道怎么修吗 守则: public class MyAmqpConfigurat

我编写了Java应用程序,它向RabbitMQ发送消息。 然后Flume从RabbitMQ队列中拾取消息。 我感兴趣的是,除了flume,没有人从队列中提取消息

我的应用程序使用Spring AMQP Java插件

问题是: 使用下面的代码,消息将进入RabbitMQ队列并永远保持“未确认”。 据我所知,RabbitMQ正在等待MessageListener的确认,但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());
     }


}
公共类myamqp配置{
@自动连线
连接工厂连接工厂;
@豆子
公共SimpleMessageListenerContainer messageListenerContainer(){
SimpleMessageListenerContainer容器=新的SimpleMessageListenerContainer(connectionFactory);
setQueues(activityLogsQueue());
setMessageListener(MyMessageListener());
容器。setConcurrentConsumers(3);
返回容器;
}
@Bean(name=“myTemplate”)
公共的rabbitmplate rabbitmplate(){
RabbitTemplate=新的RabbitTemplate(connectionFactory);
setMessageConverter(MyMessageConverter());
返回模板;
}
}
公共类MyMessageListener实现MessageListener{
公共MyMessageListener(MessageConverter转换器、MyMessageHandler messageHandler){
这个。转换器=转换器;
this.messageHandler=messageHandler;
}
@凌驾
消息(消息消息)上的公共无效{
this.messageHandler.doThings();
}
}
公共类MyMessageHandler{
@自动连线
@限定符(“myTemplate”)
兔模板;
@凌驾
公共无效handleMessage(MyObject对象){
convertAndSend(交换、路由密钥、东西);
}
}
公共类MyMessageConverter扩展了JsonMessageConverter{
@凌驾
受保护的消息createMessage(对象对象,MessageProperties MessageProperties){
//做事
}
@凌驾
来自消息的公共对象(消息消息)引发MessageConversionException{
抛出新的UnsupportedOperationException(“fromMessage在“+this.getClass().getName()中不受支持”);
}
}

如果不想确认每条消息,则可以通过执行以下操作在SimpleMessageListenerContainer上设置AcknowledgeMode

container.setAcknowledgeMode(AcknowledgeMode.NONE);
有关更多信息,请查看

更新:应为“确认模式”。无

设置为AcknowledgeMode.NONE以告知代理不希望收到任何确认,并且它将假定所有消息在发送时都得到确认(这在本机兔子代理术语中是“自动确认”)。如果AcknowledgeMode.NONE,则通道不能是事务性的(因此,如果意外设置该标志,则容器将在启动时失败)


以下是导致阅读解决方案的讨论:


thanx,但它没有太大变化,因为默认情况下setAcknowledgeMode是自动的。。。