我正在尝试构建一个基本的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();
答案 0 :(得分:2)
您是否正在使用异步消费者,即您是否有onMessage
方法来接收消息?
在创建消费者之后调用connection.start
的原因是connection.start
调用告诉消息传递提供程序启动消息传递。您的应用程序必须准备好接收消息。如果您正在使用消息侦听器(onMessage
方法),那么建议您首先创建使用者设置消息侦听器,然后调用connection.start
以便您的应用程序准备好接收消息。
否则,您可以拨打connection.start
,然后拨打consumer.receive
方法同步接收邮件。
请注意,如果您的应用程序正在生成消息且没有消费者,则无需致电connection.start
。