We support reliable high performance load balancing of messages on a queue across consumers.
consumer가 죽은 경우, unacknowledged 메시지는 다른 consumer에게로 재전송된다.
빠른 consumer는 되는 대로 가져가고 느린 consumer는 느린 대로 가져간다.

Broker clusters
JMS 컨텍스트에서 가장 기본적인 클러스터링 모델은 JMS broker 집합에 JMS client가 접속하면 그중 하나에 연결되며, broker가 down된 경우 자동으로 다른 broker에 연결된다는 것이다.
activemq는 JMS client에서 failover:// 프로토콜을 사용함으로서 이를 실현한다. 
Failover Transport Reference 페이지에서 상세를 볼 수 있다.

Discovery of brokers
클라이언트가 자동으로 감지하여 broker에 연결할 수 있도록 auto-discovery of brokers using static discovery ordynamic discovery 를 지원한다.

Networks of brokers
client/server 또는 hub/spoke 스타일의 topology를 가지고, 많은 클라이언트와 많은 broker들을 가진다고 했을 때, producer만 동작하고 consumer가 없을 경우 메시지는 계속 쌓이기만 할 것이다. 이를 피하기 위해 producer와 연결된 broker로부터 consumer와 연결된 broker로 메시지를 옮기는 store and forward 방식의 broker의 network(Networks of Brokers)를 제공한다. 이는 broker의 네트워크를 만드는 분산 queue와 topic(distributed queues and topics)을 제공한다.
Networks of brokers에서 클라이언트는 어떤 broker라도 연결할 수 있으며 클러스터로 묶여 있으므로 failover도 된다.
또한, Networks of brokers는 필요한 만큼의 broker를 추가할 수도 있어 거대한 수의 클라이언트 네트워크로 확장할 수도 있다.
broker가 방화벽을 통과하여 네트워크 사이를 연결할 수도 있다.
그러나, broker 링으로 구성된 네트워크에서 하나의 broker의 고장은 전체 망을 고장나게 할 수도 있다.

Master Slave
기본적으로 모든 메시지는 master/slave cluster사이에서 복제된다(replicated). 따라서 master가 고장인 경우 잃어버리는 메시지 없이 자동으로 slave로 failover 된다.
master/slave cluster는 논리적으로 하나의 메시지 broker로 동작한다.
master - slaves(stand-by) 구조.


The Failover Transport(http://activemq.apache.org/failover-transport-reference.html)

configuration syntax
failover:(uri1,...,uriN)?transportOptions
or
failover:uri1,...,uriN

기본적으로 uri는 리스트에서 랜덤하게 선택된다.
만약, 첫번째를 master로 쓰고 나머지는 slave(backup)로 사용하려면 randomize 옵션을 끈다.

failover:(tcp://primary:61616,tcp://secondary:61616)?randomize=false
※ 옵션 상세는 http://activemq.apache.org/failover-transport-reference.html 참조

Notes
If you use failover, and a broker dies at some point, your sends will block by default. UsingTransportListener can help with this regard. It is best to set the Listener directly on theActiveMQConnectionFactory so that it is in place before any request that may require an network hop.

Pure Master Slave(http://activemq.apache.org/pure-master-slave.html)
shared file system이나 shared database 에 의존하지 않고 fully 복제된 토폴로지를 제공한다.

* slave broker는 master의 모든 메시지를 consume한다.
* master broker는 slave에 메시지를 성공적으로 넘긴 후에 client에 응답을 한다. transaction도 마찬가지.
* 클라이언트는 failover transport를 사용하여 ..



출처 - http://deepblue28.tistory.com/entry/ActiveMQ-clustering

Posted by linuxism
,