Hi, at first glance I don't see anything wrong with your assumptions and setup. You should try testing it in your environment and see if it works as expected.
Cheers -- Dejan Bosanac - http://twitter.com/dejanb Open Source Integration - http://fusesource.com/ ActiveMQ in Action - http://www.manning.com/snyder/ Blog - http://www.nighttale.net On Sun, Jul 18, 2010 at 9:28 PM, Vjaceslavs Klimovs <vklim...@gmail.com> wrote: > Hi, > > We generally have two types of messages passing through our ActiveMQ > instances. (1) First type needs transacted guaranteed delivery and > high-availability, but the amount of messages of this kind is low, and > latency is not really important. (2) Second type, on the other hand, > needs low latency delivery, and there can be substantial amount of these > messages. However, reliability is not that important. (3) We would also > like to be able to take down brokers as needed, and of course we want > them to come up and resume operations when we are done with doing > whatever we were doing with the respective machine. (4) We don't have > SAN but we have clustered MySQL database. (5) We want to use JMX for > management. > > This is where our findings start. Messages of type (1) should be > sent and received using JMS transactions, and should be persistent. > Messages of type (2) should be sent in auto acknowledgement mode and > should not be persistent. Because of HA requirement in (1) we need to > run two brokers. Because of (3) and (4) the only suitable > master/slave configuration is using JDBC. Because of the (2), small > limits should be placed on queues, and VM cursor should be used. > > Now, how I think this is going to work. Any of the two brokers which > starts first, grabs a lock on the DB, becomes master and starts it's > transport connections. The other one that starts after, does not get a > lock and does not start transport connections. Clients, which are > configured to use failover:// transport, connect to either one and start > exchanging messages, either of type (1) or of type (2). Type (1) > messages are persisted to the database. If the master broker goes down, > slave gets the database lock, starts transport connectors and party > continues. If the one that went down comes up, it becomes slave and > waits for the lock. Type (2) messages are never persisted, and > therefore are very fast. > > Based on all above, I've created configuration for brokers, it is here: > http://pastebin.com/YxV15k8M > > I would be really grateful if someone could look through it, as well as > through my assumptions on the functioning of the system, and see if I > am wrong, missed something, or if something can be done better to > achieve stated requirements. I also have two concrete questions: > 1) Is store usage counted when JDBC persistence is used? > 2) VM cursor and small memory limits are used. Does that mean that > nothing will ever be paged out for non-persistent messages? > > Sorry for the long post. Thank you in advance for any feedback. > > /Vjaceslavs > >