I am looking for a good JMS implementation that can do the following:
in a single (local) transaction, be able to write 20,000 or more persistent messages to 3 different queues, each. It should be able to do this in a few seconds.
Before you say, ActiveMQ, I've already tried it and it hangs at about 19,000 messages.
what do you mean it hangs at 19,000?
ActiveMQ has been aroudn for a long time, and used in some mission critical production systems.
if your convenienced its not your design, i recommend JBoss MOM.
Here's what I tried for ActiveMQ:
1. Downloaded version 4.1.1
2. Ran the embedded broker using the default persistence config (journalledJDBC), used -Xms1500m -Xmx1500m for the JVM running the embedded broker
3. Ran a separate client JVM that sets transacted=true and persisted=true, begins a transaction and begins a for loop to insert 20,000 messages into the example test queue. This is basically a "large batch in a single transaction" that is good for performance. At about 19,825 messages, the client program just stops responding. The messages aren't large, they contain short text like "this is message # x"
If this setup requires ActiveMQ tuning, I could not find it anywhere on the website.
You are about to make a mistake :), and I've made the EXACT same mistake when awhile back on enterprise "Transactions", trust me when i say this....always make sure your transactions are VERY short. meaning if u have a transaction that takes more than a second(even that may be to long), its to long.
do u have the code for the JMS client? cut and paste it.