【发布时间】:2013-02-21 00:43:05
【问题描述】:
您好,我有一个包含生产者和消费者的 java 代码。生产者将消息发送到队列,消费者也收到消息,但我不知道为什么不显示消息。我正在使用activeMQ,因为我没有收到消息,所以我在http:/localhost:8161/admin/queues.jsp 中签入,它显示队列同时具有生产者和消费者但是消息没有打印在命令提示符。请告诉我
生产者.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();
}
}
consumer.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();
}
}
【问题讨论】:
-
a) 请尝试格式化代码:减少空行,删除不必要的 cmets 等; b)您是否尝试过在消费者处调试代码?我一眼看不出有什么完全错误的,但你能确定这条消息是
TextMessage吗?只是为了确定...... -
@DaDaDom 感谢您的回复,是的,它是一个文本消息,我尝试在不使用诸如 system.out.println(message) 之类的 if 条件的情况下进行打印;但它没有给任何
-
我在本地运行了您的代码,消息发送和接收并输出到控制台没有任何问题。
-
@TimBish 感谢您的回复,是的,这是有效的,但有时它会在我的系统中产生问题。当它不起作用时,我必须重新启动 activeMQ 服务器,然后它才能工作。我不知道为什么会这样。
-
您是否在消费者处收到消息,您能否在 If 块
if (message instanceof TextMessage)上方打印“消息”对象并告诉我们?
标签: java jms activemq producer-consumer jms-topic