Programing

실제 JMS / 메시지 큐 사용?

crosscheck 2020. 5. 22. 23:43
반응형

실제 JMS / 메시지 큐 사용? [닫은]


JMS와 Apache ActiveMQ에 대한 내용을 읽었습니다. 그리고 여기서 사람들이 JMS 또는 이와 유사한 메시지 대기열 기술을 사용하는 실제 환경이 무엇인지 궁금했습니다.


JMS (ActiveMQ는 JMS 브로커 구현)는 비동기 요청 처리를 허용하는 메커니즘으로 사용될 수 있습니다. 요청을 완료하는 데 시간이 오래 걸리거나 여러 당사자가 실제 요청에 관심이 있기 때문에이 작업을 수행 할 수 있습니다. 이를 사용하는 또 다른 이유는 여러 클라이언트 (잠재적으로 다른 언어로 작성 됨)가 JMS를 통해 정보에 액세스 할 수 있도록하기위한 것입니다. STOMP 프로토콜을 사용하여 C # / Java / Ruby 클라이언트에서 액세스를 허용 할 수 있으므로 ActiveMQ가 좋은 예입니다.

실제 예는 특정 고객을 위해 주문하는 데 사용되는 웹 응용 프로그램입니다. 주문을하고 데이터베이스에 저장하는 과정에서 다음과 같은 여러 가지 추가 작업을 수행 할 수 있습니다.

  • 일종의 타사 백엔드 시스템 (예 : SAP)에 주문 저장
  • 고객에게 이메일을 보내 주문이 완료되었음을 알리십시오.

이를 위해 애플리케이션 코드는 주문 ID가 포함 된 JMS 큐에 메시지를 공개합니다. 대기열을 수신하는 애플리케이션의 한 부분이 orderId를 가져 와서 데이터베이스에서 주문을 찾은 다음 다른 제 3 자 시스템에 주문을함으로써 이벤트에 응답 할 수 있습니다. 애플리케이션의 다른 부분은 orderId를 취하고 고객에게 확인 이메일을 보내는 일을 담당 할 수 있습니다.


장기 실행 작업을 비동기 적으로 처리하려면 항상 사용하십시오. 웹 사용자는 요청이 처리 될 때까지 5 초 이상 기다리기를 원하지 않습니다. 그보다 오래 실행되는 요청이 있으면 요청을 대기열에 제출하고 사용자가 작업이 완료된 시점을 확인할 수있는 URL을 즉시 보내도록 설계합니다.

발행 / 구독은 많은 수신자로부터 보낸 사람을 분리하는 또 다른 좋은 기술입니다. 가입자가 필요에 따라왔다 갔다 할 수 있기 때문에 유연한 아키텍처입니다.


JMS에 대한 많은 놀라운 용도가 있습니다.

  • 고객 서비스를위한 웹 채팅 커뮤니케이션.

  • 백엔드에서 디버그 로깅 모든 앱 서버는 다양한 수준에서 디버그 메시지를 브로드 캐스트했습니다. 그런 다음 JMS 클라이언트를 시작하여 디버그 메시지를 감시 할 수 있습니다. 물론 syslog 와 같은 것을 사용할 수 있었지만 상황 정보 (앱 서버 이름, API 호출, 로그 수준, 사용자 ID, 메시지 유형 등으로 기준)를 기반으로 출력을 필터링하는 모든 방법을 제공했습니다. 또한 출력물을 채색했습니다.

  • 파일에 디버그 로깅. 위와 동일하게 필터를 사용하여 특정 부분 만 꺼내고 일반 로깅을 위해 파일에 기록했습니다.

  • 경고. 다시 말하지만 위의 로깅과 비슷한 설정, 특정 오류를보고 다양한 방법 (이메일, 문자 메시지, IM, Growl 팝업 ...)을 통해 사람들에게 경고합니다.

  • 소프트웨어 클러스터를 동적으로 구성 및 제어합니다. 각 앱 서버는 "configure me"메시지를 브로드 캐스트 한 다음 모든 종류의 구성 정보가 포함 된 메시지로 응답하는 구성 데몬입니다. 나중에 모든 앱 서버에서 한 번에 구성을 변경해야하는 경우 구성 데몬에서 수행 할 수 있습니다.

  • 그리고 청구, 주문 처리, 프로비저닝, 이메일 생성과 같은 지연된 활동에 대한 일반적인 대기 트랜잭션.

비동기식으로 메시지 전달을 보장하려는 모든 위치에서 유용합니다.


분산 형 (a) 동기 컴퓨팅.
실제 예는 응용 프로그램 전체의 알림 프레임 워크 일 수 있으며 응용 프로그램 사용 과정에서 다양한 시점에 이해 관계자에게 메일을 보냅니다. 따라서 응용 프로그램은 객체 Producer를 만들어 특정 Message객체에 배치하고 Queue앞으로 이동 함으로써 작동합니다. 문제를 구독 하고 보낸 사람을 처리하는 데주의를 기울일
세트가있을 것 입니다. 이 거래 과정에서 s는 주어진 처리 방법에 대한 논리와 분리되어 있습니다. 메시징 프레임 워크 (ActiveMQ 등)는 s 를 제공 하여 이러한 트랜잭션 을 용이하게하는 백본 역할을합니다 .ConsumerQueueMessageProducerMessage
MessageMessageBroker


다른 펀드 관리 시스템간에 일중 거래를 보내는 데 사용했습니다. 훌륭한 기술 메시징에 대해 더 자세히 알고 싶다면 " 엔터프라이즈 통합 패턴 " 책을 철저히 추천 할 수 있습니다 . 요청 / 응답 및 게시 / 구독과 같은 몇 가지 JMS 예제가 있습니다.

메시징은 훌륭한 통합 도구입니다.


기존 트랜잭션과 중단하거나 충돌하지 않으려는 비동기 처리를 시작하는 데 사용합니다.

예를 들어, "구매하기"와 같이 비싸고 매우 중요한 논리를 가지고 있다고 가정하면 구매 항목의 중요한 부분은 '물건 저장소에 알림'입니다. 통지 호출과 관련된 논리 / 프로세싱이 구매 비즈니스 논리의 자원과 차단되거나 경쟁하지 않도록 통지 호출을 비동기식으로 만듭니다. 최종 결과, 구매 완료, 사용자 만족, 우리는 돈을 얻습니다. 대기열은 배달이 보장되기 때문에 상점이 열리거나 대기열에 새 품목이 도착하자마자 통보됩니다.


나는 아마존과 비슷한 온라인 소매 웹 사이트 인 나의 학업 프로젝트에 사용했습니다. JMS는 다음 기능을 처리하는 데 사용되었습니다.

  1. 배송이 한 위치에서 다른 위치로 이동함에 따라 고객이 주문한 주문의 위치를 ​​업데이트합니다. 이것은 JMS Queue로 메시지를 지속적으로 전송하여 수행되었습니다.
  2. 배송이 지연되고 고객에게 이메일을 보내는 등의 비정상적인 이벤트에 대해 경고합니다.
  3. 배달이 목적지에 도달하면 배달 이벤트를 보냅니다.

또한 메인 서버에 연결된 원격 클라이언트도 여러 대있었습니다. 연결이 가능하면 기본 데이터베이스에 액세스하거나 자체 데이터베이스를 사용하지 않는 데 사용됩니다. 데이터 일관성을 처리하기 위해 2PC 메커니즘을 구현했습니다. 이를 위해 JMS를 사용하여 이러한 시스템간에 메시지를 교환했습니다. 즉, 큐에서 메시지를 보내 프로세스를 시작하고 다른 큐에서 메시지를 다시 보내 응답하는 코디네이터 역할을합니다. 다른 사람들이 이미 언급했듯이 이것은 pub / sub 모델과 유사합니다.


JMS가 다른 상업 및 학술 프로젝트에서 사용되는 것을 보았습니다. 완전히 분리 된 분산 시스템을 원할 때마다 JMS가 쉽게 사진에 들어올 수 있습니다. 일반적으로 한 노드에서 요청을 보내야 할 때 네트워크의 누군가가 보낸 사람에게 수신자에 대한 정보를 제공하지 않고 처리합니다.

필자의 경우 필자는 논문에서 MOM (message-oriented middleware)을 개발하는 데 JMS를 사용했다. 여기서 특정 유형의 객체 지향 객체는 요청으로 한쪽에서 생성되고 다른 쪽에서는 응답으로 컴파일 및 실행된다. .


ActiveMQ와 함께 사용되는 Apache Camel 은 엔터프라이즈 통합 패턴을 수행하는 좋은 방법입니다


우리는 온라인 견적을 생성하기 위해 메시징을 사용했습니다


We are using JMS for communication with systems in a huge number of remote sites over unreliable networks. The loose coupling in combination with reliable messaging produces a stable system landscape: Each message will be sent as soon it is technically possible, bigger problems in network will not have influence on the whole system landscape...

참고URL : https://stackoverflow.com/questions/1035949/real-world-use-of-jms-message-queues

반응형