生产者如何访问消息代理发送的确认?

时间:2014-04-11 15:58:46

标签: java jms activemq

我在main方法中有以下代码。我没有得到如何检查从消息代理发送的确认。基本上我想获得从第1行的消息代理发送的确认值

try {

  ActiveMQConnectionFactory connectionFactory =
      new ActiveMQConnectionFactory(url);

  // Create a Connection
  Connection connection = connectionFactory.createConnection();
  connection.start();

  // Create a Session
  Session session = connection.createSession(true,
      Session.AUTO_ACKNOWLEDGE);

  // Create the destination (Topic or Queue)
  Destination destination = session.createQueue(subject);

  // Create a MessageProducer from the Session to the Topic or Queue
  MessageProducer producer = session.createProducer(destination);
  producer.setDeliveryMode(DeliveryMode.PERSISTENT);

  // Create a messages
  String text = "Hello world! From Jon";
  TextMessage message = session.createTextMessage(text);

   producer.send(message);
  // how to check acknowledgement here? // line1
  session.commit();

  // Clean up
  session.close();
  connection.close();
}
catch (Exception e) {
  System.out.println("Caught: " + e);
  e.printStackTrace();
}

我创建Session session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE); 消息代理会在收到消息后发送确认,但生产者将如何获得确认?

1 个答案:

答案 0 :(得分:0)

Broker向生产者发送没有明显的确认。在非TX情况下,只有在代理已经确认后,send方法才会返回,除非您将客户端配置为始终发送异步或发送非持久性消息。在TX情况下,除非您配置始终同步发送选项,否则消息始终是异步发送的。 TX情况下的同步点是提交调用,在消息被持久化并且TX结束之前不会返回。