ActiveMQ报错:Cannot synchronously receive a message when a MessageListener is set

ActiveMQ报错:Cannot synchronously receive a message when a MessageListener is set


最近在看消息队列,看了ActiveMQ的消息队列,我自己模拟消息生产者与消息消费者,不过期间一直遇到了这个问题,网上查找了好久,终于找到了解决方案,自己写的有问题。

消息生产者代码

  • 生产者

import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;

import javax.jms.*;

public class ProducerTool {
   

    private String user = ActiveMQConnection.DEFAULT_USER;
    private String password = ActiveMQConnection.DEFAULT_PASSWORD;
    private String url = ActiveMQConnection.DEFAULT_BROKER_URL;
    private String subject = "xiaojian";
    private Destination destination = null;
    private Connection connection = null;
    private Session session = null;
    private MessageProducer producer = null;

    //初始化
    private void initialize() throws JMSException {
   
        ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(user, password, url);
        connection = connectionFactory.createConnection();
        session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        destination = session.createQueue(subject);
        producer = session.createProducer(destination);
        producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
    }

    //发消息
    public void produceMessage(String message) throws JMSException {
   
        initialize();
        TextMessage msg = session.createTextMessage(message);
        connection.start();
        System.out.println("Producer: -> Sending message : " + message);
        producer.send(msg);
        System.out.println("Producer: -> Message sent complete !");
    }

    //关闭连接
    public void close() throws JMSException {
   
        System.out.println("Producer: -> Closing connection");
        if (null != producer) {
   
            producer.close
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这个误提示表明在JMS消息监听器执行过程中出现了异常而没有设置ErrorHandler来处理异常。 在Spring Boot整合ActiveMQ时,建议在配置类中设置一个ErrorHandler来处理异常。可以通过实现org.springframework.util.ErrorHandler接口来自定义ErrorHandler,然后在配置中使用@Bean注解将其加入Spring容器中,例如: ```java @Configuration public class ActiveMQConfig { @Bean public ErrorHandler errorHandler() { return new LoggingErrorHandler(); } // 其他配置 } ``` 在这个例子中,我们创建了一个LoggingErrorHandler,通过日志输出异常信息。然后将其加入Spring容器中,以便在监听器执行过程中发生异常时自动调用。 另外,也可以使用Spring提供的默认ErrorHandler——LoggingErrorHandler,只需要在配置中添加以下代码: ```java @Configuration public class ActiveMQConfig { @Bean public DefaultJmsListenerContainerFactory jmsListenerContainerFactory(ConnectionFactory connectionFactory) { DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory(); factory.setConnectionFactory(connectionFactory); factory.setErrorHandler(new LoggingErrorHandler()); return factory; } // 其他配置 } ``` 这里我们使用了DefaultJmsListenerContainerFactory来创建JMS监听器容器,并将LoggingErrorHandler设置为其ErrorHandler。这样,当监听器执行过程中出现异常时,LoggingErrorHandler会将异常信息输出到日志中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值