启动连接JMS?

时间:2015-04-16 11:33:30

标签: java jms producer-consumer hornetq

我正在尝试构建一个基本的Producer Consumer应用程序。我有三个队列用于消息处理,可以有多个生产者和消费者。我在这里遇到的基本问题是我什么时候应该打电话给

connection.start()

我正在使用的javax.jms.QueueConnection的方法。在线列出的所有示例(例如: - https://github.com/hornetq/hornetq/blob/master/examples/jms/jmx/src/main/java/org/hornetq/jms/example/JMXExample.java) 表明在我们在目的地上生成消息之后,在我们启动消费者之后,我们应该开始连接。即connection.start()通常是最后要做的事情。是否有可能在创建连接时启动连接?例如,像这样的东西

Properties jndiProps = new Properties();
jndiProps.put("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory");
jndiProps.put("java.naming.factory.url.pkgs", "org.jboss.naming:org.jnp.interfaces");
jndiProps.put("java.naming.provider.url", "localhost:1099");
context = new InitialContext(jndiProps);
QueueConnectionFactory factory = (QueueConnectionFactory) context.lookup("/ConnectionFactory");
connection = factory.createQueueConnection();
connection.start();

1 个答案:

答案 0 :(得分:2)

您是否正在使用异步消费者,即您是否有onMessage方法来接收消息?

在创建消费者之后调用connection.start的原因是connection.start调用告诉消息传递提供程序启动消息传递。您的应用程序必须准备好接收消息。如果您正在使用消息侦听器(onMessage方法),那么建议您首先创建使用者设置消息侦听器,然后调用connection.start以便您的应用程序准备好接收消息。

否则,您可以拨打connection.start,然后拨打consumer.receive方法同步接收邮件。

请注意,如果您的应用程序正在生成消息且没有消费者,则无需致电connection.start