java - Azure 服务总线队列 - JMS 消息监听器调用程序设置因目标异常而失败

标签 java spring azure servicebus

我能够连接并使用来自 Azure 服务总线队列的消息。但是在消息处理过程中随机出现以下错误。错误出现后,看起来消息要么没有被进一步使用,要么被推送到 DLQ。重新启动监听器应用程序会导致出现相同的异常。

我正在将 Spring DefaultMessageListenerContainer 与 Apache Qpid 结合使用

2016-05-05 01:49:36.303 WARN 14716 — [nerContainer-61] o.s.j.l.DefaultMessageListenerContainer : Setup of JMS message listener invoker failed for destination 'org.apache.qpid.amqp_1_0.jms.impl.QueueImpl@5f61cba7' - trying to recover. Cause: Timeout waiting for attach

Unknown endpoint Transfer{handle=0,deliveryId=36,deliveryTag=P\xb8)T\xd9\xea%A\x95\xe5Fj]\x91\x00\x15,messageFormat=0,more=false,batchable=true} Unknown endpoint Transfer{handle=0,deliveryId=36,deliveryTag=\xdc\x9b\x9d\xf5\x817\x9bO\x97.\x19\xeam<\x00\x81,messageFormat=0,more=false,batchable=true}

javax.jms.IllegalStateException: Closed at org.apache.qpid.amqp_1_0.jms.impl.SessionImpl.checkClosed(SessionImpl.java:326) at org.apache.qpid.amqp_1_0.jms.impl.SessionImpl.getTransacted(SessionImpl.java:222) at org.springframework.jms.listener.AbstractMessageListenerContainer.commitIfNecessary(AbstractMessageListenerContainer.java:757) at org.springframework.jms.listener.AbstractMessageListenerContainer.doExecuteListener(AbstractMessageListenerContainer.java:665) at org.springframework.jms.listener.AbstractPollingMessageListenerContainer.doReceiveAndExecute(AbstractPollingMessageListenerContainer.java:315) at org.springframework.jms.listener.AbstractPollingMessageListenerContainer.receiveAndExecute(AbstractPollingMessageListenerContainer.java:253) at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.invokeListener(DefaultMessageListenerContainer.java:1158) at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.run(DefaultMessageListenerContainer.java:1052) at java.lang.Thread.run(Unknown Source)

更新:

`public DefaultMessageListenerContainer messageListenerContainer() throws NamingException {
    DefaultMessageListenerContainer messageListenerContainer = new DefaultMessageListenerContainer();
    messageListenerContainer.setConnectionFactory(connectionFactory());
    Destination queue = (Destination) context.lookup("STORAGE_NEW_QUEUE");
    messageListenerContainer.setDestination(queue);
    messageListenerContainer.setConcurrency(concurrency);
    messageListenerContainer.setSessionAcknowledgeMode(Session.CLIENT_ACKNOWLEDGE);
    messageListenerContainer.setCacheLevel(DefaultMessageListenerContainer.CACHE_SESSION);
        messageListenerContainer.setErrorHandler(new EDIMessageErrorHandler());
    MessageListenerAdapter adapter = new MessageListenerAdapter();
    adapter.setDelegate(new EDIMessageListener());
    adapter.setDefaultListenerMethod("onMessage");
    messageListenerContainer.setMessageListener(adapter);
    return messageListenerContainer;
}`

请告知可能出现的问题。

谢谢

最佳答案

在没有任何代码的情况下,我不确定是什么原因导致了该问题。

不过,有一个官方文档Service Bus messaging exceptions其中列出了 Microsoft Azure 服务总线消息传递 API 生成的一些异常,以及 Exception types 部分列出消息传递异常类型及其原因,并注明您可以采取的建议操作。我想你可以引用它来检查你的问题。

根据异常信息未知端点,根据我的异常,我认为原因可能是在AMQP与QPID连接的配置中。我搜索了可能的原因,并得到了有用的链接 https://mail-archives.apache.org/mod_mbox/qpid-users/201009.mbox/%3[email protected]%3E 。希望对您有所帮助。

您能分享一下投资该问题的关键代码吗?

如有任何疑问,请随时告诉我。

关于java - Azure 服务总线队列 - JMS 消息监听器调用程序设置因目标异常而失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37038803/

相关文章:

java - 为什么我的类成员无法访问我的 getter 方法?

Java 在使用 ProcessBuilder 启动新进程时添加参数

spring - 通用代码因 Spring 数据和 Querydsl 失败

java - Spring 4 中 ExpressionEvaluationUtils 的替代方案

sql-server - R 连接到 MS SQL

azure - 是否可以使用 AMQP.Net Lite 库连接到 Azure 服务总线中的分区主题?

java - JAX-WS,日期时区被误解

java.lang.NullPointerException - Java 服务器和 C 客户端

java - 如何在生产 Spring BOOT 中提供 Angular 数据?

python - Azure KeyVault : how to retrieve clientId, clientSecret 和现有服务主体的tenantId?