我们有一个应用程序1)响应的自定义服务器(常规ServerSocket)2)运行在客户端桌面上的Java SWING应用程序/applet。
我们有超过140个这样的自定义服务器(专用于每组swing客户端)。我们已经建立了一个管理应用程序来管理服务器启动,关闭和其他东西。对于管理应用程序和服务器之间的通信,我们正在构建一个JMS应用程序。由于服务器上的沉重负担,我们没有将此JMS放在同一个盒子上,因此我们保留了使用单独JMS盒子的选项。我需要一个单独的队列为每个服务器。
我的问题是我们可以在单个应用程序服务器上有140多个JMS队列吗?如果是,理想的硬件配置应该是什么?如果没有,你有什么建议?
谢谢
前段时间我发现了一篇有趣的文章:
[ActiveMQ] Broker 在一个节点上打开700个队列后失败,原因是打开的文件太多——显然,它为每个队列提供了一个tempfile,为每个JAR(其中有124个!)提供了一个打开的文件,以及60个杂项文件句柄。当客户端退出时,打开的文件数量不会减少。一些谷歌搜索暗示ActiveMQ中有许多与泄漏的文件句柄有关的错误。
您可以使用更少的队列和消息选择器(以提取特定于每个客户端的消息),或者查看如何配置ActiveMQ以处理大量队列的页面…
同样,如果您使用的是KahaDB 5.3+,那么它被优化为使用更少的文件描述符,等等…
我将只回答"if not"部分。
如果需要,您可以通过使用消息选择器来减少队列计数。一组服务器可以发送到一个队列,并由消息属性标识。你肯定已经把它定义好了—一个唯一标识服务器的IP、URL。
这是最后的解决方案,因为可以更好地监视单独的队列。