【问题标题】:Messages not being received from Azure Service Bus Queue未从 Azure 服务总线队列收到消息
【发布时间】:2014-10-09 22:27:08
【问题描述】:

我在我们的项目中添加了一个新的工人角色来处理拨出电话。它会提取调用以取消服务总线队列。
我制作了一个小控制台应用程序来将东西放入队列中,以便我可以检查以确保它正常工作。不幸的是,似乎我的应用程序放入队列的任何内容都会立即(或几乎立即?)放入死信队列。我看了一下队列的属性,我可以看到

MessageCount 5
ActiveMessageCount 0
DeadLetterMessageCount 5
TransferMessageCount 0
AvailabilityStatus Available
EnableDeadLetteringOnMessageExpiration False

worker 角色试图从队列中取出东西,但它所提取的只是空值。
队列设置与我们正在工作的其他队列相同。我放入队列的对象几乎由所有原语组成,标记为 [MessageContract] 和 [Serializable]。所有成员都标记为 [MessageHeader]。
我还尝试使用我们用于其他队列的对象,只是为了看看会发生什么,并且那个对象也会立即出现死信。

我不明白。随着队列大小的增加,该对象显然正在进入队列。但它马上就是死信,除了超时之外,我不知道是什么原因导致这种情况发生。

更多信息:使用服务总线资源管理器进行查看,似乎由于 MaxDeliveryCountExceeded 消息被死信。这似乎意味着如果接收消息失败超过 10 次,它会将其转移到死信队列。所以部分解决了,但我在工作角色代码中放置了一个调试点,并且那里从来没有发生任何错误。我的

BrokeredMessage message = Client.Receive()

总是返回 null,所以它甚至没有时间做错事。我想在实际的 Receive() 调用中出了点问题?

【问题讨论】:

  • 你能提供更多代码吗?请展示您如何创建客户端(用于发送方和接收方),以及如何将消息推送到队列中。

标签: c# azure azure-servicebus-queues


【解决方案1】:

事实证明,在 MessageContract 中有一个 Uri 就足以让它在反序列化过程中的某个地方失败。所以 Client.Receive();尝试了10次,总是失败,然后它就死了。 我认为 Uris 是可序列化的,但将它们通过服务总线似乎存在问题。无论如何,在我的情况下,将 Uri 更改为字符串并不是什么大问题,现在一切都很好。

【讨论】:

  • 很高兴我看到了这个。非常感谢您回来并回答您自己的帖子。我自己也遇到了完全相同的问题,并且发现很难调试。对我来说,这是断断续续的,根本没有帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-28
  • 2017-02-13
  • 2017-04-16
  • 1970-01-01
  • 2014-11-03
相关资源
最近更新 更多