当前位置: 首页 > 知识库问答 >
问题:

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

越伯寅
2023-03-14
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());
     }


}

共有1个答案

穆展鹏
2023-03-14

如果您不想必须对每个消息进行访问,那么可以通过以下操作在SimpleMessageListenerContainer上设置AccountygeMode

container.setAcknowledgeMode(AcknowledgeMode.NONE);

查看API参考以获得更多信息。

更新:应该是确认的mode.none

 类似资料:
  • 我正在尝试实现一个非常简单的骆驼路由,即从CXFendpoint接收请求,并将其放置在队列中,以便稍后进行异步处理。一旦消息被放置在队列中,我需要能够向调用者发送一个响应,指示消息已被接收。我已经完成了教程,但似乎无法正确完成。所发生的情况是,一旦消息被放置在队列中,在消息从队列处理到其预期目的地之前,不会向调用者发送响应。 下面的代码

  • 问题内容: 我试图将字符串消息发送到在weblogic服务器中创建的JMS队列中。我使用Eclipse IDE,当我运行Web应用程序时,出现以下错误,tomcat服务器关闭。错误是 请帮助我。谢谢和最诚挚的问候 问题答案: 基于对该问题的一些快速研究,它似乎是由于在应用服务器和客户端之间使用不同的JDK级别引起的。我看到的大多数示例都表明,在Java 5上运行Weblogic时在客户端上使用Ja

  • 我设置了一个EJB项目,使用JMS将持久性实体对象发送到MDB。我使用JBoss EAP 7,使用Apache ActiveMQ作为消息传递提供程序。我像这样设置ConnectionFactory和队列: 这是我的消息生成器,它接收“Account”实体对象作为参数并将其发送到队列: EntityEnqueueBean。Java语言 MDB从队列接收消息并对其进行处理: java账户 不确定我做错

  • 问题内容: 我的GO版本是1.1.1 连接关闭后服务器收到的消息,但设置了NoDelay。 有什么不对 问题答案: 您的代码似乎没有任何根本性的错误,因此我猜错误是在服务器端。 如果在端口5432上创建本地TCP服务器,则可以对此进行测试。 尝试运行下面的服务器代码,然后针对它测试客户端代码。它只是将所有接收到的数据回显到stdout。 按下回车键后,您应该看到发送给客户端的每一行都已打印(没有换

  • 我是Spring JMS的新手。我的应用程序是使用Spring Boot开发的,并部署在JBoss EAP7.2.0中。我有一个远程队列,它是一个活动的MQ Artemis队列,也嵌入在JBoss EAP7.2.0中。有人能建议我如何使用Spring Boot的JmsTemplate向远程JMS队列发送消息吗?基本上,我不知道应该如何定义远程connectionFactory来连接到远程队列。

  • 因此,我实现了自己的mpi库(简化版本),我需要在进程之间发送/接收一些数据。MPI_Send看起来像这样(void *buf,整数计数,数据类型数据等)。所以这意味着我需要发送数据类型(char,double或int)的计数元素,指向buf的地址。我需要通过消息队列(mq)发送它们。MPI_Recv采用大致相同的参数。目前,这是我在发送和Recv中所做的: 现在我只接收数组的第一个元素。我该如何

  • 为什么已经拥有了共享内存时需要消息队列呢? 这将是多种原因,让我们将其分解为多个点来简化 - 据了解,一旦消息被一个进程接收到,它将不再可用于任何其他进程。 而在共享内存中,数据可供多个进程访问。 如果想使用小信息格式进行通信。 当多个进程同时进行通信时,共享内存数据需要同步保护。 使用共享内存的写入和读取频率很高,那么实现功能将会非常复杂。 在这种情况下不值得使用。 如果所有的进程不需要访问共享

  • 一、消息模型 点对点 发布/订阅 二、使用场景 异步处理 流量削锋 应用解耦 三、可靠性 发送端的可靠性 接收端的可靠性 参考资料 一、消息模型 点对点 消息生产者向消息队列中发送了一个消息之后,只能被一个消费者消费一次。 发布/订阅 消息生产者向频道发送一个消息之后,多个消费者可以从该频道订阅到这条消息并消费。 发布与订阅模式和观察者模式有以下不同: 观察者模式中,观察者和主题都知道对方的存在;