2

使用Java SDK(0.4.1)从SB队列检索邮件时,即使有问题的队列为空也会返回非空ReceiveQueueMessageResult 。在该结果上调用getValue()将返回非空BrokeredMessage。我应该如何告诉我已经在空队列上调用了接收?很显然,在分布式并发系统中,查询大小不是一个选项。使用Java SDK从空Azure ServiceBus队列接收时接收非空邮件

我正在使用ReceiveAndDelete模式和队列是新创建的,所以我知道它是空的。

根据文档,对API的底层调用应返回StatusCode为204.我找不到任何方法来访问返回的结果或消息中的代码。

+0

我在BrokeredMessage中的DelegateHttpsURLConnection类型的匿名内部类中找到了MessageHeaders(响应)隐藏的响应头。果然,那里有204个。无法通过BrokeredMessage上的界面(我可以找到)找到它。 – WillD 2013-03-22 19:11:30

回答

1

我们已经记录了这个问题,我们现在正在进行修复。顺便说一下,Windows Azure SDK for Java是开源的,如果您愿意放弃版权给MSFT,您甚至可以提交自己的修复程序。源代码可以发现https://github.com/WindowsAzure/azure-sdk-for-java

+0

已经分叉了项目。 – WillD 2013-03-25 14:55:03

+0

已经分叉了项目。 关于解决方案的一些评论。 1)对空队列的调用,不应该导致一个ServiceException异常。 200系列状态码指示成功/正确的调用。返回的204代码表明队列为空,这不是一个Exceptional或Error条件。 2)当前实现返回一个空的BrokeredMessage。内容长度为0不应指示队列为空。在消息传递系统中通常会创建没有主体的有效消息,但通过标头/属性传达他们的意图。 – WillD 2013-03-25 15:01:35

+0

已实施修复并在github id下提交了一个pull请求:billAtPros。 – WillD 2013-03-25 18:55:30