使用SendBatchAsync方法向服务总线发送1000个代理消息

时间:2015-06-25 08:32:43

标签: azure servicebus azureservicebus brokeredmessage

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

  1. 从数据库中获取的数据(批量为1000)
  2. 每行数据都转换为Brokered Message并添加到列表中。
  3. 使用 SendBatchAsync 方法将1000个代理消息列表发送到服务总线。
  4. 我正面临这个问题的第三步。这是代码:

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

    当编译器使用SendBatchAsync方法时,它会在与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字节

2 个答案:

答案 0 :(得分:5)

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

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

  

批次的最大大小与a的最大大小相同   单个消息(目前为256 Kb)。

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

答案 1 :(得分:1)

您可以在Azure Service Bus中使用高级命名空间。 这允许消息高达1MB。 虽然标题仍然限制在64K。

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

了解更多信息 - &gt;

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