답변:
JMS (ActiveMQ는 JMS 브로커 구현)는 비동기 요청 처리를 허용하는 메커니즘으로 사용될 수 있습니다. 요청을 완료하는 데 시간이 오래 걸리거나 여러 당사자가 실제 요청에 관심이 있기 때문에이 작업을 수행 할 수 있습니다. 이를 사용하는 또 다른 이유는 여러 클라이언트 (잠재적으로 다른 언어로 작성 됨)가 JMS를 통해 정보에 액세스 할 수 있도록하기위한 것입니다. STOMP 프로토콜을 사용하여 C # / Java / Ruby 클라이언트의 액세스를 허용 할 수 있으므로 ActiveMQ가 좋은 예입니다.
실제 예는 특정 고객을 위해 주문하는 데 사용되는 웹 응용 프로그램입니다. 주문을하고 데이터베이스에 저장하는 과정에서 다음과 같은 여러 가지 추가 작업을 수행 할 수 있습니다.
이를 위해 애플리케이션 코드는 주문 ID가 포함 된 JMS 큐에 메시지를 공개합니다. 대기열을 수신하는 애플리케이션의 한 부분이 orderId를 가져 와서 데이터베이스에서 주문을 찾은 다음 다른 제 3 자 시스템에 주문을함으로써 이벤트에 응답 할 수 있습니다. 애플리케이션의 다른 부분은 orderId를 취하고 고객에게 확인 이메일을 보내는 일을 담당 할 수 있습니다.
장기 실행 작업을 비동기 적으로 처리하려면 항상 사용하십시오. 웹 사용자는 요청이 처리 될 때까지 5 초 이상 기다리기를 원하지 않습니다. 그보다 오래 실행되는 요청이 있으면 요청을 대기열에 제출하고 사용자가 작업 완료 시점을 확인할 수있는 URL을 즉시 다시 보내는 것이 한 가지 디자인입니다.
발행 / 구독은 많은 수신자로부터 보낸 사람을 분리하는 또 다른 좋은 기술입니다. 가입자가 필요에 따라왔다 갔다 할 수 있기 때문에 유연한 아키텍처입니다.
JMS에 대한 많은 놀라운 용도가 있습니다.
고객 서비스를위한 웹 채팅 커뮤니케이션.
백엔드에서 디버그 로깅 모든 앱 서버는 다양한 수준에서 디버그 메시지를 브로드 캐스트했습니다. 그런 다음 JMS 클라이언트를 시작하여 디버그 메시지를 감시 할 수 있습니다. 물론 syslog 와 같은 것을 사용할 수 있었지만 상황 정보 (앱 서버 이름, API 호출, 로그 수준, 사용자 ID, 메시지 유형 등으로 기준)를 기반으로 출력을 필터링하는 모든 방법을 제공했습니다. 또한 출력물을 채색했습니다.
파일에 디버그 로깅. 위와 동일하게 필터를 사용하여 특정 부분 만 꺼내고 일반 로깅을 위해 파일에 기록했습니다.
경고. 다시 말하지만 위의 로깅과 비슷한 설정, 특정 오류를보고 다양한 방법 (이메일, 문자 메시지, IM, Growl 팝업 ...)을 통해 사람들에게 경고합니다.
소프트웨어 클러스터를 동적으로 구성 및 제어합니다. 각 앱 서버는 "configure me"메시지를 브로드 캐스트 한 다음 모든 종류의 구성 정보가 포함 된 메시지로 응답하는 구성 데몬입니다. 나중에 모든 앱 서버에서 구성을 한 번에 변경해야하는 경우 구성 데몬에서 수행 할 수 있습니다.
그리고 청구, 주문 처리, 프로비저닝, 이메일 생성과 같은 지연된 활동에 대한 일반적인 대기 트랜잭션.
비동기식으로 메시지 전달을 보장하려는 모든 위치에서 유용합니다.
분산 형 (a) 동기 컴퓨팅.
실제 예는 응용 프로그램 전체의 알림 프레임 워크 일 수 있으며 응용 프로그램 사용 과정에서 다양한 시점에 이해 관계자에게 메일을 보냅니다. 따라서 응용 프로그램은 객체 Producer
를 만들어 특정 Message
객체에 배치하고 Queue
앞으로 이동 함으로써 작동합니다.
이 세트 것 Consumer
에 가입 할의 Queue
질문에, 그리고 처리 돌볼 것 Message
를 통해 전송합니다. 이 거래 과정에서 Producer
s는 주어진 Message
처리 방법의 논리와 분리되어 있습니다.
메시징 프레임 워크 (ActiveMQ 등)는 s Message
를 제공 하여 이러한 트랜잭션 을 용이하게하는 백본 역할을합니다 MessageBroker
.
다른 펀드 관리 시스템간에 일중 거래를 보내는 데 사용했습니다. 훌륭한 기술 메시징이 무엇인지에 대해 더 배우려면 " 엔터프라이즈 통합 패턴 " 책을 철저히 추천 할 수 있습니다 . 요청 / 응답 및 게시 / 구독과 같은 몇 가지 JMS 예제가 있습니다.
메시징은 훌륭한 통합 도구입니다.
기존 트랜잭션과 중단하거나 충돌하지 않기 위해 비동기 처리를 시작하는 데 사용합니다.
예를 들어, "구매하기"와 같이 비싸고 매우 중요한 논리를 가지고 있다고 가정하면 구매 항목의 중요한 부분은 '물건 저장소에 알림'입니다. 통지 호출과 관련된 논리 / 프로세싱이 구매 비즈니스 논리의 자원과 차단되거나 경쟁하지 않도록 통지 호출을 비동기식으로 만듭니다. 최종 결과, 구매 완료, 사용자 만족, 우리는 돈을 받고 대기열이 배달을 보장하기 때문에 상점이 열리거나 대기열에 새 품목이 도착하자마자 통보됩니다.
나는 아마존과 비슷한 온라인 소매 웹 사이트 인 나의 학업 프로젝트에 사용했습니다. JMS는 다음 기능을 처리하는 데 사용되었습니다.
주 서버에 연결된 원격 클라이언트도 여러 대있었습니다. 연결이 가능하면 기본 데이터베이스에 액세스하거나 자체 데이터베이스를 사용하지 않는 데 사용됩니다. 데이터 일관성을 처리하기 위해 2PC 메커니즘을 구현했습니다. 이를 위해 JMS를 사용하여 이러한 시스템간에 메시지를 교환했습니다. 즉, 큐에서 메시지를 보내 프로세스를 시작하고 다른 큐에서 메시지를 다시 보내 응답하는 코디네이터 역할을합니다. 다른 사람들이 이미 언급했듯이 이것은 pub / sub 모델과 유사합니다.
ActiveMQ와 함께 사용되는 Apache Camel 은 엔터프라이즈 통합 패턴을 수행하는 좋은 방법입니다