gpt4 book ai didi

java - 运行jms队列时,生产者发送消息,消费者获取消息,但消息不显示

转载 作者:行者123 更新时间:2023-12-01 06:19:00 25 4
gpt4 key购买 nike

嗨,我有java代码,它有一个生产者和一个消费者。生产者将消息发送到队列,消费者也收到消息,但我不知道为什么消息没有显示。我正在使用 activeMQ,因为我没有收到消息,所以我在 http://localhost:8161/admin/queues.jsp 中 checkin ,它显示队列有生产者和消费者,但消息没有打印在命令提示符。请告诉我

生产者.java

import javax.jms.*;
import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;

public class Producer {

private static String url = ActiveMQConnection.DEFAULT_BROKER_URL;
private static String subject = "test";

public static void main(String[] args) throws JMSException {

ConnectionFactory connectionFactory =
new ActiveMQConnectionFactory(url);
Connection connection = connectionFactory.createConnection();
connection.start();

Session session = connection.createSession(false,
Session.AUTO_ACKNOWLEDGE);
Destination destination = session.createQueue(subject);
MessageProducer producer = session.createProducer(destination);

TextMessage message = session.createTextMessage("this is a g message");
producer.send(message);

System.out.println("Sent message '" + message.getText() + "'");
System.out.println( ActiveMQConnection.DEFAULT_BROKER_URL);
connection.close();
}
}

消费者.java

import javax.jms.*;

import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;

public class Consumer {

private static String url = ActiveMQConnection.DEFAULT_BROKER_URL;
private static String subject = "test";

public static void main(String[] args) throws JMSException {

ConnectionFactory connectionFactory
= new ActiveMQConnectionFactory(url);
Connection connection = connectionFactory.createConnection();
connection.start();

Session session = connection.createSession(false,
Session.AUTO_ACKNOWLEDGE);

Destination destination = session.createQueue(subject);
MessageConsumer consumer = session.createConsumer(destination);
Message message = consumer.receive();

if (message instanceof TextMessage) {
TextMessage textMessage = (TextMessage) message;
System.out.println("Received message '"
+ textMessage.getText() + "'");
}
connection.close();
}
}

最佳答案

在我看来,代码应该可以工作。不是说显而易见的事情,但您确定在同一系统上运行生产者和消费者吗?您连接到的默认代理 URL 依赖于 localhost - 因此显然生产者和消费者必须位于同一系统上。您确定您的独立 Java 应用程序正在连接到 activeMQ 服务器并成功创建连接吗?

如果是,那么你可以 connect via jmx 并检查队列上的以下指标:

入队计数 - 显示队列上发布的消息数量 -> 确认您的生产者是否正在发布
出队计数 - 显示已消费但未确认的消息数量 -> 确认您的消费者是否已消费
调度计数 - 显示消费和确认的消息数量 -> 确认您的消费者已确认,即消费者在消费时未抛出导致其无法确认消息的异常。

如果一切正常,这些计数应该相等。

关于java - 运行jms队列时,生产者发送消息,消费者获取消息,但消息不显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15243721/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com