【问题标题】:MassTransit on Azure Service Bus throws MessageSizeExceededExceptionAzure 服务总线上的 MassTransit 引发 MessageSizeExceededException
【发布时间】:2016-09-11 22:41:38
【问题描述】:

我正在使用 MassTransit 发送和接收微服务命令。当我在本地运行它(远程连接到 Azure 服务总线实例)时,它可以正常发送和接收。例如。我从本地控制台应用程序向远程 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. 我应该完全禁用分区吗?如果有,怎么做?

【问题讨论】:

  • @stuartd 谢谢,我在那个论坛上发布了同样的问题。不确定 Google Groups 是如何工作的——它可能需要审查或其他什么——但我在任何地方都看不到我自己的问题。我再次发布它只是为了确保它,但在点击“POST”后它就会消失并重定向到主页。

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


【解决方案1】:

服务总线的消息限制为 256k,其中包括围绕消息主体本身的序列化信封。如果您在错误中看到 1.9MB 的消息大小,那么您显然是在推送一个非常大的消息。

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

【讨论】:

  • 谢谢。使用服务总线资源管理器查看消息,它说“大小”是“106330”。我假设它指的是字节,因为在检查 JSON 主体的大小时,它比那个小一点(这与包括信封在内的预期大小相关)。所以我的问题仍然存在,为什么它会认为消息是 1.9MB?没有附件,也没有二进制数据。
  • 这对我来说确实很奇怪,我知道我们在 Azure 中运行了许多服务,例如云服务,它们与 Azure 中的服务总线配合得很好。
猜你喜欢
  • 1970-01-01
  • 2022-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多