2016-12-29 2 views
1

로드 밸런서를 사용하여 멀티 클러스터 환경에서 응용 프로그램을 배포했습니다.Jms 게시자에 대한 조언

응용 프로그램에서는 성능을 향상시키기 위해 캐시를 유지합니다.

우리가 멀티 클러스터 환경에있는 것처럼 싱글 톤은 실제로 싱글 톤이 아니므로 한 노드에서 캐시를 지우면 다른 노드에 자신의 캐시를 지우도록 알리지 않습니다.

현재 두 개의 노드 만 있지만 향후 더 추가 할 수 있습니다. 그래서 첫 번째 생각은 publish/subscriber 모델로 JMS 큐를 구현하는 것이었다. 노드가 캐시를 지우려면 캐시에 메시지를 보내고 모든 노드 (심지어 그 자신까지)는 캐시를 지우도록 자동으로 통보 받아야합니다. activemq로 확인했지만, 지금까지 보았 듯이 게시자가 메시지를 보내면 구독자는 메시지를 받기 위해 getMessage()를 수행해야합니다. 이는 메시지가 있는지를 확인하기 위해 대기열을 계속 가져야 함을 의미하며, 일단 모든 구독자가 메시지를 읽은 후에는 메시지가 제거되도록해야합니다.

activemq 또는 다른 jms 구현이 우리의 요구에 맞는 것을 제공한다면, 그런 것을 구현하는 방법에 대한 조언을 얻기 위해 글을 쓰고 있습니다.

감사합니다.

답변

1

이 시나리오는 ActiveMQ를 포함한 모든 JMS 공급자에서 매우 간단합니다.

간단히 주제에 메시지를 게시하십시오 (예 : CLEAR.CACHE). 그런 다음 각 노드를 해당 노드에 고유 한 클라이언트 ID (다시 시작한 후에도 동일한 ID이므로 코드가 아닌 환경/구성에서 해당 ID를 가져와야 함)로 연결하십시오.

각 노드는 CLEAR.CACHE 항목에 대한 영구 가입자를 만들 수 있습니다. 발행 중에 노드가 오프라인 인 경우에도 사본이 각 노드에 전달됩니다.

일부 공식 문서는 :

https://docs.oracle.com/cd/E19798-01/821-1841/bncgd/index.html 그냥 수동이 물건 처리하지 않는 경우뿐만 아니라, 사용하는 완전 분산 캐시 솔루션이 있다는 것을 말하고 싶었다. Redis, hazlecast 등. 그러나 원하는 모든 것이 노드 (또는 노드 사이에 배포 할 다른 유형의 명령) 사이의 기본 "캐시 지우기"명령 인 경우 JMS를 사용하는 것이 좋습니다.

+0

감사합니다. – fgonzalez