programing

JMS/메시지 큐를 실제로 사용합니까?

goodcopy 2022. 7. 28. 22:30
반응형

JMS/메시지 큐를 실제로 사용합니까?

JMS와 Apache ActiveMQ에 대해 읽고 있었습니다.그리고 여기 사람들은 JMS나 유사한 메시지 큐 기술을 어떤 용도로 사용했는지 궁금했습니다.

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

실제 예로는 특정 고객에 대한 주문에 사용되는 웹 응용 프로그램을 들 수 있습니다.주문(및 데이터베이스에 저장)의 일환으로 다음과 같은 추가 태스크를 수행할 수 있습니다.

  • 주문을 일종의 서드파티 백엔드 시스템(SAP 등)에 저장
  • 고객에게 이메일을 보내 주문이 완료되었음을 알립니다.

이를 위해 응용 프로그램 코드는 주문 ID가 포함된 메시지를 JMS 큐에 게시합니다.큐를 수신하는 어플리케이션의 일부는 orderId를 취득하여 데이터베이스에서 주문을 검색한 후 다른 서드파티 시스템에 해당 주문을 발행함으로써 이벤트에 응답할 수 있습니다.어플리케이션의 다른 부분은 orderId를 취득하여 고객에게 확인 이메일을 발송하는 역할을 할 수 있습니다.

장시간 실행되는 작업을 비동기적으로 처리하려면 항상 이러한 작업을 사용하십시오.웹 사용자는 요청이 처리될 때까지 5초 이상 기다리지 않습니다.실행 시간이 더 길 경우 큐에 요청을 전송하고 사용자가 확인할 수 있는 URL을 즉시 전송하여 작업이 완료되면 이를 확인하는 것이 하나의 설계입니다.

발행/구독은, 송신자를 많은 수신자로부터 분리하는 또 하나의 좋은 기술입니다.사용자가 필요에 따라 출입할 수 있기 때문에 유연한 아키텍처입니다.

저는 JMS를 아주 많이 사용해 왔습니다.

  • 고객 서비스를 위한 웹 채팅 통신.

  • 백엔드 디버깅로깅모든 앱 서버는 다양한 수준에서 디버깅 메시지를 브로드캐스트했습니다.그런 다음 JMS 클라이언트를 실행하여 디버깅메시지를 감시할 수 있습니다.물론 syslog 같은 을 사용할 수도 있었지만, 이를 통해 상황별 정보(예: q, api 호출, 로그 수준, 사용자 ID, 메시지 유형 등)에 따라 출력을 필터링할 수 있는 모든 방법을 사용할 수 있었습니다.출력도 색칠을 했어요.

  • 파일에 대한 디버깅로그위와 마찬가지로 필터를 사용하여 특정 조각만 추출하고 일반 로깅을 위해 파일에 기록했습니다.

  • 경고.위의 기록과 유사한 설정, 특정 오류 감시 및 다양한 수단(이메일, 텍스트 메시지, IM, Growl 팝업...)을 통한 경고.

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

  • 또한 청구, 주문 처리, 프로비저닝, 이메일 생성과 같은 지연된 작업을 위해 일반적으로 대기 중인 트랜잭션도 있습니다.

비동기식으로 메시지 전달을 보장하고 싶은 곳이라면 어디에나 적합합니다.

분산형(a) 동기 컴퓨팅.
실제의 예로는 애플리케이션 전체의 통지 프레임워크를 들 수 있습니다.이 프레임워크는 애플리케이션 사용 중 다양한 시점에서 이해관계자에게 메일을 보냅니다.즉, 어플리케이션의 동작합니다.Producer작성에 의해Message오브젝트, 특정 오브젝트, 특정 오브젝트Queue, 그리고 앞으로 나아갑니다.
한 세트가 있을 것이다.Consumer서브스크라이브를 하는 사용자Queue문제가 있는 경우, 그리고 주의해서 처리해 주세요.Message전송되었습니다.이 거래 과정에서,Producers는 주어진 논리로부터 분리되어 있다.Message처리될 것입니다.
메시징 프레임워크(ActiveMQ 등)는 이러한 기능을 촉진하기 위한 백본 역할을 합니다.Message제공에 의한 거래MessageBrokers.

다른 펀드 관리 시스템 간에 거래내역을 보내는 데 사용했어요뛰어난 테크놀로지 메시징에 대해 자세히 알고 싶다면 "엔터프라이즈 인테그레이션 패턴"이라는 책을 추천합니다.요청/응답 및 게시/구독 등의 JMS 예가 있습니다.

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

이를 사용하여 기존 트랜잭션과 충돌하거나 중단하고 싶지 않은 비동기 처리를 시작합니다.

예를 들어, "물건을 구입한다"와 같이 비싸고 매우 중요한 논리가 있다고 가정하면, 물건을 구입할 때 중요한 부분은 "물건을 저장한다"는 것입니다.델은 통지 콜을 비동기식으로 하여 통지 콜과 관련된 논리/처리가 비즈니스 로직 구입을 차단하거나 리소스와 경합하지 않도록 합니다.최종 결과, 구매가 완료되고, 사용자는 만족하며, 우리는 돈을 받을 수 있으며, 큐는 배송이 보장되기 때문에 오픈하자마자 또는 큐에 새로운 아이템이 있는 즉시 가게가 통지됩니다.

아마존과 비슷한 온라인 소매 사이트인 학술 프로젝트에 사용해 왔습니다.JMS는 다음 기능을 처리하기 위해 사용되었습니다.

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

메인 서버에 접속되어 있는 복수의 리모트 클라이언트도 실장하고 있었습니다.연결이 사용 가능한 경우 를 사용하여 기본 데이터베이스에 액세스하거나 자체 데이터베이스를 사용하지 않는 경우 를 사용합니다.데이터 일관성을 유지하기 위해 2PC 메커니즘을 구현했습니다.이를 위해 JMS를 사용하여 이들 시스템 간에 메시지를 교환했습니다.즉, 큐에서 메시지를 전송함으로써 프로세스를 시작하는 코디네이터 역할을 하는 사람과 큐에서 메시지를 다시 전송하여 응답하는 사람이 있습니다.다른 사람들이 이미 언급했듯이, 이것은 pub/sub 모델과 비슷했다.

JMS는 상업적인 프로젝트나 학술적인 프로젝트에서 사용되고 있는 것을 본 적이 있습니다.JMS는 완전히 분리된 분산 시스템을 원하는 경우 언제든지 쉽게 도입할 수 있습니다.일반적으로, 1 개의 노드로부터 요구를 송신할 필요가 있는 경우, 네트워크내의 누군가가 수신자에 관한 정보를 송신자에게 제공하지 않고, 그 요구를 처리합니다.

저 같은 경우 JMS를 사용하여 논문의 메시지 지향 미들웨어(MOM)를 개발하고 있습니다.이 MOM은 특정 오브젝트 지향 오브젝트를 당신의 요구로 한쪽에서 생성하고 반대쪽에서 컴파일하여 응답으로 실행하고 있습니다.

ActiveMQ와 함께 사용되는 Apache Camel은 엔터프라이즈 통합 패턴을 구현하기 위한 훌륭한 방법입니다.

메시지를 사용하여 온라인 견적을 생성했습니다.

신뢰할 수 없는 네트워크를 통해 다수의 리모트 사이트의 시스템과 통신하기 위해 JMS를 사용하고 있습니다.느슨한 결합과 신뢰성 높은 메시징을 조합하여 안정된 시스템 환경을 실현합니다.각 메시지는 기술적으로 가능한 한 빨리 발송됩니다.네트워크상의 더 큰 문제는 시스템 전체에 영향을 주지 않습니다.

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

반응형