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

2024-02-20

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

  1. 从DB中获取数据(批量为1000)
  2. 每行数据都转换为代理消息并添加到列表中。
  3. 使用以下命令将 1000 条中转消息的列表发送到服务总线异步发送批处理 method.

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

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

当编译器到达 SendBatchAsync 方法时,它给出一个错误:与服务总线通信期间出错。检查连接信息,然后重试。内部例外是:

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。

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

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

我想您需要将批次进一步拆分为更小的批次,这样您就不会超过 256K 限制。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 SendBatchAsync 方法将 1000 条代理消息发送到服务总线 的相关文章

随机推荐