ActiveMQ 5.x和DurableConsumer

时间:2019-05-19 16:47:40

标签: java activemq mq activemq-artemis

我正在尝试使用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。但是,我对此有一些疑问它:

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

1 个答案:

答案 0 :(得分:2)

JMS 1.1确实支持持久订阅,您只需要查看API docs来了解如何使用此method来创建持久主题订阅者。

在SO上,我已经回答了正确的JMS依赖关系,请参见here