识别 ActiveMQ 异步消息失败?
Identify ActiveMQ asyncrhonous message failures?
我有 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()
方法的 error/success?
似乎 jms 1.1 规范不允许在发送方法中注册回调,而 jms 2.0 允许它(http://www.oracle.com/technetwork/articles/java/jms2messaging-1954190.html)。由于基于 jms 1.1 的 ActiveMq 没有标准的方法来注册回调。但是 ActvieMQ javax.jms.MessageProducer
实现 org.apache.activemq.ActiveMQMessageProducer
允许注册回调,我用它来创建我的解决方案(但不幸的是我不得不放弃 PooledConnectionFactory
因为没有办法从 org.apache.activemq.ActiveMQMessageProducer
PooledConnectionFactory
方法。
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) {
}
};);
我有 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()
方法的 error/success?
似乎 jms 1.1 规范不允许在发送方法中注册回调,而 jms 2.0 允许它(http://www.oracle.com/technetwork/articles/java/jms2messaging-1954190.html)。由于基于 jms 1.1 的 ActiveMq 没有标准的方法来注册回调。但是 ActvieMQ javax.jms.MessageProducer
实现 org.apache.activemq.ActiveMQMessageProducer
允许注册回调,我用它来创建我的解决方案(但不幸的是我不得不放弃 PooledConnectionFactory
因为没有办法从 org.apache.activemq.ActiveMQMessageProducer
PooledConnectionFactory
方法。
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) {
}
};);