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

本文关键字:KB 消息 null 返回 对于 ServiceBus Client Receive Azure | 更新日期: 2023-09-27 18:33:09

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

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

  2. 发出 Receive -命令后,数据包将从队列中删除,计数器相应递减。但是,该操作遇到超时并返回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();

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

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

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