java - ActiveMQ 5.x 和 DurableConsumer

标签 java activemq

我正在尝试使用 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.x 的更多信息,我发现仅支持 JMS 1.x,并且此版本不支持此方法,因此我需要更改为支持 JMS 2.0 的 Apache Artemis,但我有一些疑问它:

  1. 与 ACtiveMQ 5.x 库配合使用的正确 javax.jms-api 版本是什么?
  2. 如果 JMS 1.x 不支持持久消费者,为什么 ActiveMQ 5.x 代理(控制台管理)支持持久消费者?
  3. 与 Apache Artemis 配合使用的正确版本和依赖项是什么?

最佳答案

JMS 1.1 确实支持持久订阅,您只需查看 API docs要了解如何操作,这里有一个 method这将创建一个持久的主题订阅者。

我之前已经回答过什么是正确的 JMS 依赖关系,请参阅 here .

关于java - ActiveMQ 5.x 和 DurableConsumer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56209982/

相关文章:

java - 无法启动jBoss AS 7.1

java - 图形可视化

java - 为zuul转发错误设置自定义错误

java - 如何保护 Hibernate QBE 查询

ssl - 在 MQ 客户机上配置 SSL channel 连接

java - 我应该在哪里关闭我的 activemq 连接(java,jersey)

activemq - 将数据从 Kahadb 迁移到 MKahadb

JAVA错误: Utilizing Switch Statements

java - ACTIVEMQ-发布者订阅者 Hello World 示例

windows - 数据库故障使用 JDBC 持久性关闭 ActiveMQ windows 服务