Playframework 非阻塞Jms队列发送器

Playframework 非阻塞Jms队列发送器,playframework,playframework-2.0,jms,nonblocking,playframework-2.2,Playframework,Playframework 2.0,Jms,Nonblocking,Playframework 2.2,我想将日志/审核事件发布到JMS队列服务器。我实现了“QueueConnectActor”,它使用以下代码构造消息、创建队列并发送消息 这使得对JMS进行阻塞调用。我想知道有没有更好的非阻塞方式将消息发送到队列?换句话说,playframework上jms客户机的任何引用/指针或示例代码 QueueConnectionFactory factory = new com.tibco.tibjms.TibjmsQueueConnectionFactory(serverUrl); Qu

我想将日志/审核事件发布到JMS队列服务器。我实现了“QueueConnectActor”,它使用以下代码构造消息、创建队列并发送消息

这使得对JMS进行阻塞调用。我想知道有没有更好的非阻塞方式将消息发送到队列?换句话说,playframework上jms客户机的任何引用/指针或示例代码

    QueueConnectionFactory factory = new com.tibco.tibjms.TibjmsQueueConnectionFactory(serverUrl);
    QueueConnection connection = factory.createQueueConnection(userName,password);
    QueueSession session = connection.createQueueSession(false,javax.jms.Session.AUTO_ACKNOWLEDGE);

    javax.jms.Queue queue = session.createQueue(queueName);
    QueueSender sender = session.createSender(queue);        

    javax.jms.TextMessage textMessage = session.createTextMessage();
    textMessage.setText(eventXml);
    sender.send(textMessage);

    connection.close();

谢谢

JMS 1.1规范没有为非阻塞发送调用指定API或选项。所以JMS实现将不具有非阻塞的异步发送特性。但是,像WebSphere MQ这样的JMS实现具有特定于提供程序的选项,这些选项允许使用非阻塞发送调用发送消息。(参见下面的示例代码)

最近(大约一年前),JMS 2.0规范添加了一种新方法,允许应用程序异步发送消息

下面的示例代码演示了使用WebSphereMQ的异步发送

  connection = cf.createConnection();
  session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
  destination = session.createQueue("queue:///Q1");

  // Request asynchronous sends to this destination. Note: Message will be 
  // sent asynchronously if the environment permits; otherwise, message will 
  // be sent synchronously. See documentation for further details.
  ((JmsDestination) destination).setIntProperty(WMQConstants.WMQ_PUT_ASYNC_ALLOWED,
      WMQConstants.WMQ_PUT_ASYNC_ALLOWED_ENABLED);

  producer = session.createProducer(destination);

  long uniqueNumber = System.currentTimeMillis() % 1000;
  TextMessage message = session
      .createTextMessage("SimpleAsyncPutPTP: Your lucky number today is " + uniqueNumber);

  // Start the connection
  connection.start();

  // And, send the message
  producer.send(message);
  System.out.println("Sent message:\n" + message);

谢谢澄清!您使用的是什么版本的Websphere MQ?WMQConstants.WMQ_PUT_ASYNC_ALLOWED_ENABLED_在7.0中不存在。xIt在v701中可用。请查看此链接。允许搜索PutAsync。