3

我们有一个应用程序,它具有 1) 响应 2) 在客户端桌面上运行的 Java SWING 应用程序/小程序的自定义服务器(传统的 ServerSocket)。

我们有超过 140 台这样的自定义服务器(专用于每组 Swing 客户端)。我们构建了一个管理应用程序来管理服务器启动、关闭和其他内容。对于管理应用程序和服务器之间的通信,我们正在构建一个 JMS 应用程序。由于服务器的负担很重,我们没有将这个 JMS 放在同一个盒子上,因此我们留下了一个单独的 JMS 盒子的选项。我需要为每个服务器创建一个单独的队列。

我的问题是我们能否在单个应用程序服务器上拥有 140 多个 JMS 队列。如果是,那么理想的硬件配置应该是什么。如果没有,那你有什么建议。

谢谢

4

3 回答 3

3

前段时间我发现了这篇有趣的文章:

[ActiveMQ]由于打开的文件过多,代理在节点上打开 700 个队列后失败- 显然它为每个队列有一个临时文件,每个 JAR 有一个打开的文件(其中有 124 个!),以及 60 个杂项文件句柄。客户端退出时打开文件的数量不会减少。一些谷歌搜索暗示 ActiveMQ 中有许多与泄漏文件句柄有关的错误。

于 2011-09-30T22:00:32.303 回答
2

您可以使用更少的队列和消息选择器(以提取特定于每个客户端的消息)或查看此页面以了解如何配置 ActiveMQ 以处理大量队列...

此外,如果您使用的是KahaDB 5.3+,那么它经过优化以使用更少的文件描述符等......

于 2011-10-03T22:38:48.627 回答
1

I'll answer the "if not" part only.

If needed, you can reduce the queue count by making use of message selectors. A group of servers can send to one queue and be identified by a message property. You surely must have it defined already — an IP, URL that uniquely identifies a server.

This is a last-resort-solution, though, as separate queues can be monitored better.

于 2011-10-03T14:48:05.887 回答