Azure ServiceBus: Client.Receive() 对于 64 KB >的消息返回 null
本文关键字:KB 消息 null 返回 对于 ServiceBus Client Receive Azure | 更新日期: 2023-09-27 18:33:09
我正在使用一个包含带有序列化对象的Stream
的BrokeredMessage
。根据文档,流是正文的一部分,而不是限制为 64 KB 的标头。大约 67 KB 的总消息远低于 ServiceBus 队列的消息大小 256 KB 的限制。
-
我能够发送一条消息,它以正确的消息大小显示在队列中。
-
发出
Receive
-命令后,数据包将从队列中删除,计数器相应递减。但是,该操作遇到超时并返回null
指针而不是BrokeredMessage
。
我尝试过使用大小为 42 KB 的数据包,并且一切正常 - 发送、接收和反序列化。
问:为什么它不适用于较大的消息,如何使其工作?
编辑 0
我尝试接收一个充满随机模式的byte
数组:
var bm = new BrokeredMessage(new byte[n])
-
n
= 63500 确实有效。(发送:HeaderSize
= 53,BodySize
= 63572;收到:HeaderSize
= 139,BodySize
= 63572( -
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