我正在尝试构建一个基本的生产者消费者应用程序。我有三个消息处理队列,并且可以有多个生产者和消费者。我在这里面临的基本问题是我应该在什么时候调用
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();发布于 2015-04-16 22:42:08
你是否在使用异步消费者,即你有没有onMessage方法来接收消息?
在创建消费者之后调用connection.start的原因是,connection.start调用通知消息传递提供者开始消息传递。您的应用程序必须准备好接收消息。如果您正在使用消息侦听器(onMessage方法),那么建议您首先创建消费者,设置消息侦听器,然后调用connection.start,以便您的应用程序准备好接收消息。
注如果您的应用程序正在生成消息,并且没有使用者,则不需要调用connection.start。
https://stackoverflow.com/questions/29673440
复制相似问题