【问题标题】:Start Connection JMS?启动连接 JMS?
【发布时间】:2015-06-22 18:49:12
【问题描述】:

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

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

【问题讨论】:

    标签: java jms producer-consumer hornetq


    【解决方案1】:

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

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

    否则可以先调用connection.start再调用consumer.receive方法同步接收消息。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-13
      • 1970-01-01
      • 2011-03-20
      • 2021-03-02
      • 2014-04-17
      • 2013-01-14
      • 1970-01-01
      • 2023-03-08
      相关资源
      最近更新 更多