启动连接 JMS



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

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();

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

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

否则,可以调用connection.start然后调用consumer.receive方法来同步接收消息。

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

最新更新