【问题标题】:Azure Service bus Queue - Setup of JMS message listener invoker failed for destination exceptionAzure 服务总线队列 - JMS 消息侦听器调用程序的设置因目标异常而失败
【发布时间】:2016-08-30 13:05:03
【问题描述】:

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

我正在使用带有 Apache Qpid 的 Spring DefaultMessageListenerContainer

2016-05-05 01:49:36.303 WARN 14716 — [nerContainer-61] o.s.j.l.DefaultMessageListenerContainer : JMS 消息的设置 目标的侦听器调用程序失败 'org.apache.qpid.amqp_1_0.jms.impl.QueueImpl@5f61cba7' - 试图 恢复。原因:等待附加超时

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

javax.jms.IllegalStateException: 关闭时间 org.apache.qpid.amqp_1_0.jms.impl.SessionImpl.checkClosed(SessionImpl.java:326) 在 org.apache.qpid.amqp_1_0.jms.impl.SessionImpl.getTransacted(SessionImpl.java:222) 在 org.springframework.jms.listener.AbstractMessageListenerContainer.commitIfNecessary(AbstractMessageListenerContainer.java:757) 在 org.springframework.jms.listener.AbstractMessageListenerContainer.doExecuteListener(AbstractMessageListenerContainer.java:665) 在 org.springframework.jms.listener.AbstractPollingMessageListenerContainer.doReceiveAndExecute(AbstractPollingMessageListenerContainer.java:315) 在 org.springframework.jms.listener.AbstractPollingMessageListenerContainer.receiveAndExecute(AbstractPollingMessageListenerContainer.java:253) 在 org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.invokeListener(DefaultMessageListenerContainer.java:1158) 在 org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.run(DefaultMessageListenerContainer.java:1052) 在 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;
}`

请告知可能是什么问题。

谢谢

【问题讨论】:

  • 问:那么 Azure 端的日志是怎么说的呢?您的 Spring/QPid 日志仅显示“我尝试通信时超时”。这就是问题的“结果”。你需要找到CAUSE。听起来您需要查看 1)您的 Azure 服务,以及 2)您在 AZure 和 QPid 之间的网络通信......除了查看日志和/或检测您的 Azure 服务之外,您可能还需要 Wireshark跟踪。
  • 抱歉回复晚了。您能否告知我如何在 Azure 上获取服务总线队列的日志。我只能看到命名空间上不可用的操作日志链接。请注意,消息侦听器正在 Azure VM 上运行。我已经更新了我的 DMLC 配置。
  • @pkumar 哪里可以解决这个问题?

标签: java spring azure servicebus


【解决方案1】:

我不确定是什么原因导致了没有任何代码的问题。

但是,有一个官方文档 Service Bus messaging exceptions 列出了一些由 Microsoft Azure 服务总线消息传递 API 生成的异常,Exception types 部分列出了消息传递异常类型及其原因,并说明了您可以采取的建议措施。我认为您可以参考它来检查您的问题。

根据异常信息Unknown endpoint,根据我的异常,我认为原因可能是在AMQP与QPID连接的配置中。我搜索了可能的原因,并得到了有用的链接https://mail-archives.apache.org/mod_mbox/qpid-users/201009.mbox/%3CAANLkTimNsHx3BeXCuYxbPOo+_3+vpH-Eu0AQcJfA07Oe@mail.gmail.com%3E。希望对您有所帮助。

您能否分享调查该问题的关键代码?

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

【讨论】:

    猜你喜欢
    • 2014-02-20
    • 1970-01-01
    • 2021-11-29
    • 2021-07-24
    • 2015-06-26
    • 2017-05-07
    • 2015-06-07
    • 1970-01-01
    • 2014-11-03
    相关资源
    最近更新 更多