有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java为什么我的消息消费者不接收所有其他消息?

我已经编写了一些代码,使用运行在Glassfish 4服务器上的ActiveMQ将TestMessages推送到队列上 如果我连续发送消息“A”、“B”、“C”、“D”、“E”、“F” 我只收到“A”、“C”、“E”

有人知道为什么吗

消息生产者

public void sendMessage(String msg) {
    try {
        if (session == null) {
            session = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
            queue = session.createQueue(QUEUE_NAME);
        }
        messageProducer = session.createProducer(queue);
        Message message = createMessage(msg);
        messageProducer.send(message);
    } catch (NamingException nex) {
        System.out.println("Messager - naming exception" + nex.getLocalizedMessage());
    } catch (JMSException jex) {
        System.out.println("Messager - JMS exception" + jex.getLocalizedMessage());
    }
}

消息消费者

public class Listener extends Thread implements MessageListener {           
    private void run() {
        try {
            connectionFactory = new ActiveMQConnectionFactory(AMQ_USER, AMQ_PASS, url);
            connection = connectionFactory.createConnection();
            session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
            queue = session.createQueue(QUEUE_NAME);
            consumer = session.createConsumer(queue);
            consumer.setMessageListener(this);
            connection.start();
        } catch (NamingException nex) {
            log.error("Error in run()", nex);
        } catch (JMSException jex) {
            log.error("Error in run()", jex);
        }
    }

    @Override
    public void onMessage(Message message) {
        if (message instanceof TextMessage) {
            try {
                TextMessage textMessage = (TextMessage) message;
                if (textMessage != null) {
                    System.out.println(textMessage.getText());
                }
            } catch (JMSException e) {
                e.printStackTrace();
            }
        }
    }
}

提前谢谢 标记


共 (1) 个答案

  1. # 1 楼答案

    这里显而易见的答案是,在该目的地上运行着多个消费者。每当一个队列有多个使用者时,消息就在它们之间进行负载平衡。您可以通过JMX或使用Web控制台连接到代理,并检查队列上的订阅以查看有多少订阅