确定ActiveMQ异步消息失败?

确定ActiveMQ异步消息失败?,activemq,Activemq,我有ActiveMQ持久队列,由于性能原因,我将使用异步模式发布给生产者 ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory(brokerURL); factory.setUseAsyncSend(true); PooledConnectionFactory connectionFactory = new PooledConnectionFactory(factory); Connection connect

我有ActiveMQ持久队列,由于性能原因,我将使用异步模式发布给生产者

 ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory(brokerURL);
 factory.setUseAsyncSend(true);
 PooledConnectionFactory connectionFactory = new PooledConnectionFactory(factory);
 Connection connection = connectionFactory.createConnection();
 connection.start();
 Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
 MessageProduer producer = session.createProducer(destination);
 Queue queue = session.createQueue(qName);
 producer.send(queue, message);

是否有一种方法可以注册处理程序以获得
producer.send()
方法的错误/成功?

似乎jms 1.1规范不允许在send方法中注册回调,而jms 2.0允许它()。由于ActiveMq基于jms 1.1,所以没有注册回调的标准方法。然而,ActvieMQ
javax.jms.MessageProducer
implementation
org.apache.activemq.ActiveMQMessageProducer
允许注册回调,我用它来创建我的解决方案(但不幸的是,我不得不放弃
PooledConnectionFactory
,因为无法从
PooledConnectionFactory
方法中获取
org.apache.activemq.ActiveMQMessageProducer

ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory(brokerURL);
factory.setUseAsyncSend(true);
Connection connection = connectionFactory.createConnection();
connection.start();
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
MessageProduer producer = session.createProducer(destination);
Queue queue = session.createQueue(qName);
((ActiveMQMessageProducer)producer).send(queue, message, new AsyncCallback() {
        @Override
        public void onSuccess() {

        }

        @Override
        public void onException(JMSException exception) {

        }
    };);