使用Java SDK从空Azure ServiceBus队列接收时接收非空消息

使用Java SDK从空Azure ServiceBus队列接收时接收非空消息,java,azure,servicebus,azureservicebus,azure-servicebus-queues,Java,Azure,Servicebus,Azureservicebus,Azure Servicebus Queues,使用Java SDK(0.4.1)从SB队列检索消息时,即使所涉及的队列为空,也会返回非空的ReceiveQueueMessageResult。对该结果调用getValue(),将返回非null的BrokeredMessage。我怎么知道我在一个空队列中呼叫了receive?显然,在分布式并发系统中,查询大小不是一个选项 我正在使用ReceiveAndDelete模式,队列是新创建的,所以我知道它是空的 根据docs,对API的底层调用应该返回204的状态码。我找不到任何方法来访问返回结果或消息

使用Java SDK(0.4.1)从SB队列检索消息时,即使所涉及的队列为空,也会返回非空的
ReceiveQueueMessageResult
。对该结果调用
getValue()
,将返回非null的
BrokeredMessage
。我怎么知道我在一个空队列中呼叫了receive?显然,在分布式并发系统中,查询大小不是一个选项

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


根据docs,对API的底层调用应该返回204的状态码。我找不到任何方法来访问返回结果或消息中的代码。

我们已记录了此问题,我们正在解决此问题。顺便说一下,Windows Azure SDK for Java是开源的,如果您愿意将版权让给MSFT,您甚至可以提交自己的修复程序。可以在BrokeredMessage中找到源代码

我发现响应头将MessageHeader(响应)隐藏在DelegateHttpsURLConnection类型的匿名内部类中。没错,里面有个204。没有办法通过BrokeredMessage上的接口访问它(我可以找到)。我们已经完成了这个项目。关于解决方案的几点意见。1) 依我看,对空队列的调用不应导致ServiceException。200系列状态代码表示调用成功/正确。返回的204代码表示队列为空,这不是异常或错误情况。2) 当前实现返回一条空的BrokeredMessage。内容长度0不应表示队列为空。消息传递系统中的常见做法是创建没有正文的有效消息,但通过标题/属性传达其意图。我们已实施修复并提交了github id:billAtPros下的请求。