Azure Service Bus上的MassTransit会抛出MessageSizeExceededException

时间:2016-09-08 23:12:43

标签: c# azure azureservicebus masstransit azure-servicebus-queues

我正在使用MassTransit发送和接收微服务命令。当我在本地运行它(远程连接到Azure Service Bus实例)时,它发送和接收正常。例如。我将命令从本地控制台应用程序发送到远程ServiceBus队列(我可以在Service Bus Explorer 3.0.4中看到),然后我的本地TopShelf服务接收并处理该命令。但是,当我部署我的服务时,它失败并出现以下错误:

Microsoft.ServiceBus.Messaging.MessageSizeExceededException: The received message (delivery-id:0, size:1904586 bytes) exceeds the limit (262144 bytes) currently allowed on the link.

我只发送一条消息,消息相当大,但肯定不是错误中提到的1.8MB!它只比100KB大一点。

我找到了this post regarding batch partitioning of messages,但在我看来,如果您想将多条消息拆分为较小的消息组,那么这只是相关的。我只发送一条消息。另外,我在MassTransit中找不到任何关于如何实际操作的文档。我尝试像这样设置IServiceBusHostConfiguratorcfg.BatchFlushInterval = TimeSpan.FromSeconds(0.05);

  1. 有人可以解释为什么它认为我的信息要大得多吗?
  2. 我可以将单个邮件拆分为更小的分区吗?或者有不同的解决方案吗?
  3. 我应该完全禁用分区吗?如果是这样,怎么样?

1 个答案:

答案 0 :(得分:0)

Service Bus对邮件的限制为256k,其中包括邮件正文周围的序列化信封。如果您在错误中看到消息大小为1.9MB,那么您显然会发出一个非常大的消息。

仔细查看您的邮件大小,如果邮件中包含附件或二进制数据等内容,请考虑使用MessageData<>功能将二进制有效内容发送到带外。