java - 当我尝试调用 org.apache.activemq.ActiveMQSession.createDurableConsumer 时,为什么会出现 java.lang.AbstractMethodError

标签 java jms activemq

出于某种原因,我无法创建持久消费者来从 activemq 摄取消息。我研究过herehere ,但使用最新版本(连同 Java 1.7)并没有解决问题。我一定是使用了错误的版本/某些东西的实现,但我一直无法根除它。这是代码:

import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.QueueSession;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.jms.Topic;
import org.apache.activemq.ActiveMQConnectionFactory;

ConnectionFactory cf = new ActiveMQConnectionFactory("bob", "bobsPword", "tcp://localhost:61616");
Connection connection = cf.createConnection();
connection.start();
Session session = connection.createSession(false, QueueSession.AUTO_ACKNOWLEDGE);
Topic topic = session.createTopic("TEST.QUEUE.FOO");
MessageConsumer consumer = session.createDurableConsumer(topic, "clientId");
Message message = consumer.receiveNoWait();
if (message instanceof TextMessage) {
    System.out.println("message: " + ((TextMessage) message).getText());
}else{
    System.out.println("unexpected message...");
}

错误:

Exception in thread "main" java.lang.AbstractMethodError: org.apache.activemq.ActiveMQSession.createDurableConsumer(Ljavax/jms/Topic;Ljava/lang/String;)Ljavax/jms/MessageConsumer;

我的依赖项:

<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.11</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>javax.jms</groupId>
        <artifactId>javax.jms-api</artifactId>
        <version>2.0</version>
        <type>jar</type>
    </dependency>
    <dependency>
        <groupId>org.fusesource.stompjms</groupId>
        <artifactId>stompjms-client</artifactId>
        <version>1.19</version>
        <type>jar</type>
    </dependency>
    <dependency>
        <groupId>org.apache.activemq</groupId>
        <artifactId>activemq-client</artifactId>
        <version>5.10.0</version>
    </dependency>
</dependencies>

最佳答案

activemq-client v. 5.10 使用 jms 1.1.x。 Maven 传递加载:

<dependency>
    <groupId>org.apache.geronimo.specs</groupId>
    <artifactId>geronimo-jms_1.1_spec</artifactId>
    <version>1.1.1</version>
</dependency>

创建持久消费者是 jms 2.0 的新功能。因此,调用 javax.jms.Session.createDurableSubscriber(Topic topic, String name); 会引发 java.lang.AbstractMethodError。

关于java - 当我尝试调用 org.apache.activemq.ActiveMQSession.createDurableConsumer 时,为什么会出现 java.lang.AbstractMethodError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24675845/

相关文章:

java - 我在将 Firebase 实时数据库中的数据检索到字符串变量中时遇到问题

java - Jersey 我上传文件时无法授权用户

java - 缩短带有 .contains 的 if 语句

java - 如何在 Eclipse 中包含 javax.jms.*?

java - JMSListener 选择器不工作

java - 如何将多条消息一起传递给ActiveMQ中的Listener?

java - 在 ActiveMQ 中创建启动队列与动态队列之间是否存在性能差异?

VB6 和 ActiveMQ

java - 在 Spark 中执行两次 groupbykey 的最佳实践?

java - Camel 是否能提高性能?