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)复现

ActiveMQ反序列化漏洞(CVE-2015-5254)复现

ActiveMQ——ActiveMQ的安装和基本使用

ActiveMQ的学习(ActiveMQ的消息事务和消息的确认机制)

Java ActiveMQ 讲解理解JMS 和 ActiveMQ基本使用(转)