使用 SendBatchAsync 方法将 1000 条中转消息发送到服务总线

Sending 1000 brokered messages to the service bus using the SendBatchAsync method

我有一个应用程序,其中数据从 SQL 数据库中获取并作为代理消息发送到服务总线。这些是步骤:

  1. 从数据库中获取数据(以 1000 个为一批)
  2. 每行数据转换成Brokered Message并添加到列表中。
  3. 使用 SendBatchAsync 方法将 1000 条代理消息的列表发送到服务总线。

我在第 3 步遇到了这个问题。这是代码:

public async Task SendMessagesAsync(List<BrokeredMessage> brokeredMessageList)
        {
            try
            {
                var topicClient = CreateTopicClient();
                await topicClient.SendBatchAsync(brokeredMessageList);
            }
            catch(Exception ex)
            {
                throw ex;
            }
        }

当编译器使用 SendBatchAsync 方法时,它会给出一个错误 Error during with Service Bus communication with Service Bus。检查连接信息,然后重试。 内部异常为:

Internal Server Error: The server did not provide a meaningful reply; this might be caused by a premature session shutdown. TrackingId:some guid here

但是,如果我尝试发送 100 条消息,它会正常工作。我该怎么做才能让它一次发送 1000 条消息?

注意:每条消息大小为1445字节

遗憾的是,您不能这样做,因为您的总负载大小约为 1.4 MB(1445 字节 * 1000),而允许的最大批处理大小为 256 KB。

参考:https://msdn.microsoft.com/en-us/library/microsoft.servicebus.messaging.topicclient.sendbatch.aspx(备注部分)

The maximum size of the batch is the same as the maximum size of a single message (currently 256 Kb).

我想您需要将批次进一步拆分为更小的批次,以免超过 256K 的限制。

您可以在 Azure 服务总线中使用高级命名空间。 这允许最大 1MB 的消息。 虽然 header 仍然限制为 64K。

PS - 在使用高级命名空间之前检查定价。

了解更多信息 ->

https://blogs.msdn.microsoft.com/servicebus/2016/07/07/things-to-know-about-premium-messaging/