【发布时间】:2016-01-12 22:27:18
【问题描述】:
我已经创建了一个必须使用 activemq 主题的应用程序,但是在这个项目中我们不需要使用 spring xml。我只创建了一个名为 ActiveMQConsumer 的类,它实现了 MessageListener 并覆盖了 onMessage 方法,但没有任何反应……这种方法可以吗?还是缺少什么?我目前正在通过 tcp 连接。
public class ActiveMQConsumer implements MessageListener {
public ActiveMQConsumer() throws JMSException {
try {
ConnectionFactory factory = new ActiveMQConnectionFactory(CATALOG_BROKER_URL.getValue());
Connection connection = factory.createConnection();
connection.start();
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
Destination destination = session.createTopic(CATALOG_TOPIC_NAME.getValue());
MessageConsumer consumer = session.createConsumer(destination);
consumer.setMessageListener(this);
} catch (JMSException e) {
System.out.println("Error");
}
}
@Override
public void onMessage(final Message message) {
LOGGER.info("Start consuming message from Catalog");
try {
if (message instanceof TextMessage) {
TextMessage txtMessage = (TextMessage) message;
System.out.println("Message: " + txtMessage.getText());
} else {
System.out.println("Invalid Message !");
}
} catch (JMSException e) {
System.out.println("Exception" + e);
}
}
}
【问题讨论】:
-
这个类是如何使用的?你在某处做
new ActiveMQConsumer()吗?它是用@Component注释的,所以春天会这样做吗?仅仅编写一个类并不意味着它在运行时使用。可能相关:spring.io/guides/gs/messaging-jms -
@zapl 我不想用spring,我看到一些不需要它的例子......我该怎么做?
-
啊,好的。不需要弹簧。您的代码是否正常运行并且您是否已验证它是否建立了连接?有什么发布消息的吗?
-
运行您的程序后,如果在您的 activeMQ UI 中,您能够看到针对该主题的“没有消费者”为 1,那么您可以确定您的消费者正在正常运行并且有一些不同问题,但是如果消费者没有在那里注册,你需要看看你的消费者是如何执行的