ActiveMQ 5.x 和 DurableConsumer
Posted
技术标签:
【中文标题】ActiveMQ 5.x 和 DurableConsumer【英文标题】:ActiveMQ 5.x and DurableConsumer 【发布时间】:2019-10-06 04:15:16 【问题描述】:我正在尝试使用 ActiveMQ 5.x 创建一个持久的消费者,所以我有以下内容:
private static void consumeFromTopic() throws JMSException, NamingException
javax.naming.Context ctx = new InitialContext();
ConnectionFactory factory = (ConnectionFactory) ctx.lookup("ConnectionFactory");
Connection connection = factory.createConnection();
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
Topic topic = session.createTopic("topic-queue");
MessageConsumer consumer = session.createDurableConsumer(topic, "lanhellas-durable-consumer");
consumer.setMessageListener(new MyListener());
connection.start();
当我尝试启动我的消费者时,我得到了以下信息:
Exception in thread "main" java.lang.AbstractMethodError: org.apache.activemq.ActiveMQSession.createDurableConsumer(Ljavax/jms/Topic;Ljava/lang/String;)Ljavax/jms/MessageConsumer;
这是我的 pom.xml:
<dependency>
<groupId>javax.jms</groupId>
<artifactId>javax.jms-api</artifactId>
<version>2.0.1</version>
</dependency>
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-core</artifactId>
<version>5.7.0</version>
</dependency>
所以,阅读更多关于 ActiveMQ 5.xi 发现只支持 JMS 1.x 并且此版本不支持此方法,所以我需要更改为支持 JMS 2.0 的 Apache Artemis,但我有一些疑问它:
-
与 ACtiveMQ 5.x 库一起使用的正确
javax.jms-api
版本是什么?
如果 JMS 1.x 不支持,为什么 ActiveMQ 5.x 代理(控制台管理)支持持久消费者?
使用 Apache Artemis 的正确版本和依赖项是什么?
【问题讨论】:
【参考方案1】:JMS 1.1 确实支持持久订阅,您只需查看API docs 即可了解如何创建持久主题订阅者的method。
我之前已经回答了关于 SO 的正确 JMS 依赖项是什么,请参阅here。
【讨论】:
以上是关于ActiveMQ 5.x 和 DurableConsumer的主要内容,如果未能解决你的问题,请参考以下文章
ActiveMQ反序列化漏洞(CVE-2015-5254)复现
ActiveMQ反序列化漏洞(CVE-2015-5254)复现