天青ServiceBus:Client.Receive()返回null消息> 64 KB(Az

2019-10-21 08:46发布

我使用的是BrokeredMessage包含Stream与序列化对象。 根据文档的流是身体不是标题被限制为64 KB的一部分。 用约67 KB的总体消息是远低于256 KB的极限为ServiceBus队列的消息大小。

  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

@大卫普费弗这只是这么简单:

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

Answer 1:

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

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


文章来源: Azure ServiceBus: Client.Receive() returns null for messages > 64 KB