I've load testing different JMS implementations for our notification service. No one of ActiveMQ, HornetQ and OpenMQ behave as expected (issues with reliability and message prioritization). But as now I've best results with OpenMQ. Expect two issues that's probably just missconfiguration (I hope).
2 producers with one queue send messages with different priority. 1 consumer consuming from queue with constant speed that is slightly lower than producers produce. OpenMQ is running standalone and uses PostgreSQL as persistence storage (mq-admin-guide.pdf 131). All messages are sended and consumed from Apache Camel route and it's all persistent.
After about 50000 messages I see warnings and errors in OpenMQ log about low memory. Producing is throutled by broker and after some time broker stop dispatching at all. Broker JVM memory usage is on maximum.After reading a few articles i set imqReconnectAttempt in 1. After that, the error disappeared (I hope I did everything correctly)
After restart broker I've lost ALL messages (~60000) that will be in queue before shutdown.
How I must configure broker to achieve two goals:
Broker do not depend on queue size (up to 1 000 000 msgs) and on memory limit. Performance is not issue - only reliability.
Broker do not lost all messages after restart.
P.S.: I'ave see messages in DB but it's lost after restart :(