【问题标题】:How do I adjust the maximum message size for a BrokeredMessage in Windows Server Service Bus?如何调整 Windows Server 服务总线中 BrokeredMessage 的最大消息大小?
【发布时间】:2013-10-27 09:28:24
【问题描述】:

我在运行 Windows Server 2008 R2 Datacenter 的 VM 上设置了 Windows Server Service Bus 1.0。

我编写了一个控制台应用程序来向它发送和接收消息,并且效果很好。

我一直在成功发送越来越大的消息,但控制台应用程序当前在达到 5,226,338 字节(我相信是 5,226,154 字节消息正文 + 184 字节标头)时崩溃了,该大小略低于 5MB。理想情况下,我们需要更多的空间来玩。

一些堆栈跟踪如下...

未处理的异常: Microsoft.ServiceBus.Messaging.MessagingCommunicationException: 套接字连接被中止。这可能是由错误引起的 处理您的消息或接收超时被超过 远程主机或底层网络资源问题。本地插座 超时为“00:01:09.2720000”。 - --> System.ServiceModel.CommunicationException:套接字连接是 中止。这可能是由于处理您的消息时出错或 接收超时被远程主机或底层 网络资源问题。本地套接字超时为“00:01:09.2720000”。 ---> System.IO.IOException: 写操作失败,见内部异常。 ---> System.ServiceModel.CommunicationException:套接字 连接被中止。这可能是由错误处理引起的 远程主机超出您的消息或接收超时, 或底层网络资源问题。本地套接字超时为 '00:01:09.2720000' 。 ---> System.Net.Sockets.SocketException:一个 已建立的连接被主机中的软件中止 机器

Windows Azure 服务总线显然有 256KB 的固定限制,但本地 Windows Server 服务总线有 50MB 的限制。请参阅下面的文章。

提及 256KB 的 Azure 限制 - http://msdn.microsoft.com/en-us/library/windowsazure/hh694235.aspx

提及 50MB - http://msdn.microsoft.com/en-us/library/windowsazure/jj193026.aspx

我正在努力达到 50MB 的限制,我想知道我是否需要做一些事情来以某种方式配置它,或者可能需要以某种方式发送消息。我注意到上面的文章中有一个参数名称,想知道它是否可以在 PowerShell 中使用。

我一直在努力在网上找到一些关于此的好信息。有些文章与 Azure 服务总线相关,而另一些文章与 Windows Server 服务总线相关,存在很多混淆。

有 Service Bus 1.1,但我认为目前处于预览阶段,我不确定这是否会有所帮助。

我正在使用类似于下面的代码来发送消息。

namespaceManager = NamespaceManager.Create(); messagingFactory = MessagingFactory.Create();

queueClient = messagesFactory.CreateQueueClient(queueName);

queueClient.Send(new BrokeredMessage(new string('x', 5226154)));

这是从以下文章的组合中摘录的,第一篇稍微过时,第二篇更清楚地说明了需要更改哪些内容才能正常工作。

http://haishibai.blogspot.co.uk/2012/08/walkthrough-setting-up-development.html

http://msdn.microsoft.com/en-us/library/windowsazure/jj218335(v=azure.10).aspx

希望有人能帮忙。

【问题讨论】:

    标签: c# .net servicebus windows-server


    【解决方案1】:

    我也遇到了同样的问题,但经过几次尝试后我已经解决了。

    打开文件

    C:\Program Files\Service Bus\1.1\Microsoft.ServiceBus.Gateway.exe.config
    

    并更改名称为netMessagingProtocolHead set 的nettcp 绑定

    maxReceivedMessageSize="2147483647"
    maxBufferSize="2147483647"
    

    并重新启动所有服务总线服务。

    现在我可以发送和接收大小为 new string('A', 49 * 1024 * 1024) 的消息了。

    享受:-)

    马丁

    【讨论】:

    • 谢谢@Martin。这当然有帮助,我们现在成功地发送了超过 49MB 的消息,这应该足以满足我们的需求。在测试期间接近 50MB 的消息大小时,我们遇到了问题,但我怀疑这与正文发送的额外信息有关。
    • 为了其他人的利益,我为了使更改生效而重新启动的服务是服务总线网关和服务总线消息代理。
    【解决方案2】:

    您遇到的例外是超时,因此您最好的办法可能是稍微微调您的超时。您是否尝试将客户端超时设置为更高的值?你可以通过MessagingFactorySettings 对象来做到这一点。另外,您是否检查过服务器端日志以查看是否有任何线索?

    你提到的参数是设置配额。当您发送大于配额的消息时,应立即拒绝。在您的情况下,消息正在被接受,但在传输过程中显然超时。

    【讨论】:

    • 这听起来很有用。您是否有代码示例或合适的链接?我成功地创建了 MessagingFactorySettings 对象并将其传递给构造函数,但它要么不喜欢我构造地址/URI 的方式,要么不喜欢我似乎必须指定的 TokenProvider。在某些情况下,它似乎期望 URI 与 Windows Azure 相关。值得我一提的是,当出现故障时,它是即时的,而不是在超时之前出现延迟。成功的消息发送需要一两秒才能发送。
    • 仅供参考@Ramiro,在这种情况下,它似乎不是超时问题。
    猜你喜欢
    • 2012-11-17
    • 1970-01-01
    • 1970-01-01
    • 2017-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多