We have an application that has 1) a custom server (conventional ServerSocket) that responds to 2) Java SWING applications/applets running on client desktops.
We have more than 140 such custom servers (dedicated to each group of swing clients). We have built an administration application to manage the server startups, shutdowns and other stuff. For the communication between the Admin app and the Server we are building a JMS application. Due to the heavy burden on the server we are not placing this JMS on the same box, therefore we have left over an option to have seperate JMS box. I need a seperate Queue for every Server.
My Question is can开发者_高级运维 we have 140+ JMS Queues on a single Application Server. If yes what should be the ideal configuration of the hardware. If no, then what do you suggest.
Thanks
I found this interesting article some time ago:
[ActiveMQ] Broker fails after opening 700 queues on a node due to too many open files -- apparently it has a tempfile for each queue, and an open file for each JAR (of which there are 124!), and 60 miscellaneous filehandles. The number of open files does not decrease when the client quits. Some googling implies that there are numerous bugs in ActiveMQ relating to leaked filehandles.
you can either use fewer queues and message selectors (to pull messages specific to each client) or see this page on how to configure ActiveMQ to handle large numbers of queues...
also, if you are using KahaDB 5.3+, then it is optimized to use fewer file descriptors, etc...
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.
精彩评论