Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java HornetQ消费者按顺序获取消息_Java_Hornetq - Fatal编程技术网

Java HornetQ消费者按顺序获取消息

Java HornetQ消费者按顺序获取消息,java,hornetq,Java,Hornetq,我想实现具有多个消费者的pub-sub系统。这是我的发送代码: ServerLocator locator = HornetQClient.createServerLocatorWithoutHA(new TransportConfiguration(NettyConnectorFactory.class.getName(), getConfigMap())); ClientSessionFactory factory = locator.createSessionFactory();

我想实现具有多个消费者的pub-sub系统。这是我的发送代码:

ServerLocator locator = HornetQClient.createServerLocatorWithoutHA(new TransportConfiguration(NettyConnectorFactory.class.getName(), getConfigMap()));
    ClientSessionFactory factory = locator.createSessionFactory();
    ClientSession session = factory.createSession(true, true, 10);

    try {
        session.createQueue(channelName, channelName, true);
    } catch (HornetQException e) {
        if (e.getCode() != QUEUE_EXISTS) {
            throw e;
        }
    }

    ClientProducer producer = session.createProducer(channelName);
    ClientMessage message = session.createMessage(true);
    message.getBodyBuffer().writeString(messageText);

    session.start();

    producer.send(message);
    LoggerFactory.getLogger().info(String.format("Message sent to \"%s\".", channelName));

    session.close();
    factory.close();
    locator.close();
并收到:

@Override
public <T extends Callback<String>> SessionObject initReceive(String channelName, Class<T> callback) throws Exception {
    ServerLocator locator = HornetQClient.createServerLocatorWithoutHA(new TransportConfiguration(NettyConnectorFactory.class.getName(), getConfigMap()));
    ClientSessionFactory factory = locator.createSessionFactory();
    ClientSession session = factory.createSession(true, true, 10);
    session.start();

    try {
        session.createQueue(channelName, channelName, true);
    } catch (HornetQException e) {
        if (e.getCode() != QUEUE_EXISTS) {
            throw e;
        }
    }

    ClientConsumer consumer = session.createConsumer(channelName);

    return new SessionObject(locator, factory, session, consumer);
}

/**
 * Receive message from specific channel
 *
 * @param channelName Name of the source channel
 * @param callback    Custom action to do with received message
 * @param <T>         an extension of Callback<String>
 * @throws Exception
 */
@Override
public <T extends Callback<String>> void receive(SessionObject sessionObject, String channelName, Class<T> callback, AcknowledgeCallback acknowledgeCallback) throws Exception {
    ClientMessage msgReceived = sessionObject.getConsumer().receive();

    if (!acknowledgeCallback.isAcknowledged(channelName)) {
        LoggerFactory.getLogger().info("Message received, but not acknowledged");
        return;
    }

    if (msgReceived != null) {
        msgReceived.acknowledge();
        LoggerFactory.getLogger().info("Message received.");
        if (callback != null) {
            callback.newInstance().run(msgReceived.getBodyBuffer().readString());
        }
    }
}
但是,当我尝试运行2个或更多消费者时,他们按顺序工作,一个工作,其他人等待消息


如何解决此问题?

没有例外。。。没有什么如果不确切知道什么不是答案,就很难给你答案working@Clebert没有例外。当一个消费者工作时,另一个消费者挂起接收方法,当第一个消费者结束工作时,秒开始。它看起来像信号灯或临界区,但我没有在那里做这样的事情