如何调整 Windows Server Service Bus 中代理消息的最大消息大小



我已经在运行Windows Server 2008 R2数据中心的虚拟机上设置了Windows Server Service Bus 1.0。

我编写了一个控制台应用程序来发送和接收来自它的消息,这运行良好。

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

一些堆栈跟踪如下...

未处理的异常: Microsoft.ServiceBus.Messaging.MessagingCommunicationException: The 套接字连接已中止。这可能是由错误引起的 处理您的消息或接收超时被超过的 远程主机或底层网络资源问题。本地插座 超时时间为"00:01:09.2720000"。- --> 系统.服务模型.通信异常: 套接字连接是 中止。这可能是由于处理消息时出错或 远程主机或底层主机超过接收超时 网络资源问题。本地套接字超时为"00:01:09.2720000"。 ---> System.IO.IOException:写入操作失败,请参阅内部异常。---> 系统.服务模型.通信异常:套接字 连接已中止。这可能是由错误处理引起的 远程主机超过您的消息或接收超时, 或基础网络资源问题。本地套接字超时为 '00:01:09.2720000' .---> System.Net.Sockets.SocketException: an 已建立的连接被主机中的软件中止 机器

Windows Azure Service Bus

显然有 256KB 的固定限制,但内部部署的 Windows Server Service Bus 的限制为 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 Service Bus 相关的文章存在很多混淆,但其他与 Windows Server Service Bus 相关的文章存在很多混淆。

有服务总线 1.1,但我认为目前处于预览状态,我不确定这会有所帮助。

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

命名空间管理器 = 命名空间管理器.创建();消息传递工厂 = 消息传递工厂.创建();

queueClient = messagingFactory.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:Program FilesService Bus1.1Microsoft.ServiceBus.Gateway.exe.config

并使用名称集更改 nettcp 绑定netMessagingProtocolHead

maxReceivedMessageSize="2147483647"
maxBufferSize="2147483647"

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

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

享受 :-)

马丁

您遇到的异常是超时,因此最好的选择可能是稍微微调一下超时。您是否尝试过将客户端超时设置为更高的值?您可以通过 MessagingFactorySettings 对象执行此操作。另外,您是否检查了服务器端日志以查看其中是否有任何内容为您提供线索?

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

最新更新