2014-07-10 2 views
1

무엇인가의 이유로, 내구성이 강한 소비자를 생성하여 activemq에서 메시지를 수집 할 수 없습니다. herehere을 조사했지만 최신 버전 (Java 1.7과 함께)을 사용하여 문제가 해결되지 않았습니다. 잘못된 버전/구현을 사용하고 있어야하지만이를 근절 할 수는 없습니다.org.apache.activemq.ActiveMQSession.createDurableConsumer를 호출하려고 할 때 java.lang.AbstractMethodError가 발생하는 이유

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> 
+0

아마도 컴파일 타임이나 런타임에 다른 jar를 사용하고있을 것입니다. 오류가 발생한 코드에서 클래스 경로를 인쇄하려고하면 놀라운 결과가 발생할 수 있습니다. – StephaneM

답변

0

ActiveMQ를 클라이언트 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가 발생합니다.

0

onCompletion 메서드에 대한 CompletionListener 인터페이스를 사용하려고 할 때도 같은 종류의 문제 (java.lang.AbstractMethodError)가 발생했습니다. JMS 2.0 Jar를 JDK7 특정 qpid 클라이언트 Jars와 함께 사용하여 qpid 브로커에 메시지를 배치했습니다.

내 문제를 해결하려면 JMS2.0 Jars로 작업 할 때 JDK 8 특정 Qpid Jars로 전환해야하며 JDK 8을 사용하여 코드를 실행해야합니다.

관련 문제