繁体   English   中英

Azure ServiceBus:Client.Receive()对于大于64 KB的消息返回null

[英]Azure ServiceBus: Client.Receive() returns null for messages > 64 KB

我正在使用一个BrokeredMessage其中包含带有序列化对象的Stream 根据文档,流是主体的一部分,而不是标头,标头限制为64 KB。 大约67 KB的总消息远低于ServiceBus队列的消息大小256 KB限制

  1. 我能够发送一条消息,它以正确的消息大小显示在队列中。

  2. 发出后Receive -command该分组被从队列中删除并且计数器相应地递减。 但是,该操作遇到超时并返回null指针而不是BrokeredMessage

我尝试了一个大小为42 KB的数据包,并且一切正常-发送,接收和反序列化。

问:为什么它不能与较大的消息一起使用?如何使它起作用?

编辑0

我尝试接收填充有随机模式的byte数组:

var bm = new BrokeredMessage(new byte[n])
  1. n = 63500起作用。 发送: HeaderSize = 53, BodySize = 63572; 接收: HeaderSize = 139, BodySize = 63572)
  2. n = 64000 不起作用 发送: HeaderSize = 54, BodySize = 64072; 接收: null

编辑1

@David Pfeffer就是这么简单:

var queueWork = QueueClient.CreateFromConnectionString(@"Endpoint=sb://***/;SharedAccessKeyName=***;SharedAccessKey=***", path, ReceiveMode.ReceiveAndDelete);
BrokeredMessage message = queueWork.Receive();

我无法重现。 这是我的示例代码:

var client = QueueClient.CreateFromConnectionString("Endpoint=sb://***.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=***", "queue", ReceiveMode.ReceiveAndDelete);
client.Send(new BrokeredMessage(new byte[100000]));
var msg = client.Receive();
// msg is happy

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM