如何解决JMS消息侦听器调用程序无法强制转换为org.apache.qpid.client.AMQDestination
@Slf4j
@Configuration
@EnableJms
public class MyQpidConfig {
@Bean("myQpidConn")
public AMQConnectionFactory amqConnectionFactory() throws URLSyntaxException {
AMQConnectionFactory amqConnectionFactory = new AMQConnectionFactory("URL");
return amqConnectionFactory;
}
@Bean("myJmsContainer")
public DefaultMessageListenerContainer defaultMessageListenerContainer(@Qualifier("myQpidAdaptor") MessageListenerAdapter messageListenerAdapter,@Qualifier("myQpidConn")AMQConnectionFactory connectionFactory) {
DefaultMessageListenerContainer messageListenerContainer = new DefaultMessageListenerContainer();
messageListenerContainer.setConnectionFactory(connectionFactory);
messageListenerContainer.setDestinationName(destinationName);
messageListenerContainer.setMessageListener(messageListenerAdapter);
messageListenerContainer.setPubSubDomain(false);
messageListenerContainer.setSessionTransacted(true);
messageListenerContainer.setDurableSubscriptionName("MYSUBSCRIBER");
messageListenerContainer.setSubscriptionDurable(true);
messageListenerContainer.setAutoStartup(true);
messageListenerContainer.setDestination((Queue) () -> "MYQUEUE");
return messageListenerContainer;
}
@Bean("myQpidAdaptor")
public MessageListenerAdapter messageListenerAdapter() {
Preconditions.checkNotNull(qpidMessageListner,"Consumer listener not set");
MessageListenerAdapter messageListenerAdapter = new MessageListenerAdapter(new MyQpidMessageListner());
messageListenerAdapter.setDefaultListenerMethod("onMessage");
messageListenerAdapter.setDefaultResponseQueueName("MYQUEUE");
return messageListenerAdapter;
}
}
目的地名称等于
ADDR:MYSUBSCRIBER:MYQUEUE; {"create":"receiver","node":{"durable":true,"x-declare":
{"exclusive":true,"auto-delete":false,"x-bindings":[{"exchange":"amq.topic","key":"MYQUEUE"}]}}}
和我的Listener类如下,
@Slf4j
@Component
public class MyQpidMessageListner implements MessageListener{
@Override
public void onMessage(Message jmsBytesMessage) {
log.info("Control Inside");
//to do
}
}
当我当时正在运行我的应用程序时,作为异步消费者,获得了与目的地有关的异常,
DefaultMessageListenerContainer -
Setup of JMS message listener invoker Failed for destination 'com.my.MyQpidConfig$$Lambda$637/429515253@3aa1975' - trying to recover. Cause: com.my.MyQpidConfig$$Lambda$637/429515253 cannot be cast to org.apache.qpid.client.AMQDestination
如果它与AMQDestination相关,那么我如何在Java代码中创建AMQDestination。 我没有有关此QPID问题的任何资源。 任何建议的帮助都必须感谢。
解决方法
由于某种原因,您正在将lambda传递给org.springframework.jms.listener.DefaultMessageListenerContainer.setDestination(Destination)
,即:
messageListenerContainer.setDestination((Queue) () -> "MYQUEUE");
此方法需要javax.jms.Destination
实现(例如org.apache.qpid.client.AMQDestination
),而不是lambda。
您已经设置了目的地名称,即:
messageListenerContainer.setDestinationName(destinationName);
目前尚不清楚为什么还要尝试设置目的地。这是配置同一事物的两种方法。
我建议您仅删除试图设置目标的代码,而保留设置目标名称的代码。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。