我们有一个应用程序 1)响应的自定义服务器(传统的ServerSocket) 2)在客户端桌面上运行的Java SWING应用程序/ applet。
我们有超过140个这样的自定义服务器(专用于每组swing客户端)。我们构建了一个管理应用程序来管理服务器启动,关闭和其他东西。对于Admin应用程序和服务器之间的通信,我们正在构建JMS应用程序。 由于服务器上的沉重负担,我们没有将这个JMS放在同一个盒子上,因此我们留下了一个选项来分离JMS盒子。我需要为每个服务器提供一个单独的队列。
我的问题是,我们是否可以在单个Application Server上拥有140多个JMS队列。如果是,那么硬件的理想配置应该是什么。如果不是,那你有什么建议。
由于
答案 0 :(得分:3)
我前段时间发现了this有趣的文章:
由于打开的文件太多,[ActiveMQ] Broker 在节点上打开700个队列后失败 - 显然它有每个队列的临时文件和一个打开的文件每个JAR(其中有124个!)和60个杂项文件句柄。客户端退出时,打开文件的数量不会减少。一些谷歌搜索意味着ActiveMQ中有许多与泄漏文件句柄有关的错误。
答案 1 :(得分:2)
您可以使用更少的队列和message selectors(以提取特定于每个客户端的消息)或查看this page如何配置ActiveMQ以处理大量队列...
另外,如果你使用的是KahaDB 5.3+,那么它会被优化以使用更少的文件描述符等...
答案 2 :(得分:1)
我只会回答“如果不是”部分。
如果需要,您可以通过使用消息选择器来减少队列数量。一组服务器可以发送到一个队列并由message属性标识。你肯定必须已经定义了它 - 一个唯一标识服务器的IP,URL。
这是最后的解决方案,因为可以更好地监控单独的队列。