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


182

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

답변:


191

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

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

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

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


안녕하세요 @jon이 문서 태그를 보셨습니까? stackoverflow.com/documentation/jms/commit 그들은 단지 주제를 가능하게 한 커미터 지원이 필요, 난 당신이 하나 : 그들이 JMS 우리에게 멋진 문서를 제공 할 수있을 수 있다고 생각
juanmf

@Jon 내가 이해하는 jms 자체는 엔터프라이즈 통합 패턴의 구현입니까?
valik

아니, 뮬 또는 낙타는 ...
Jon

1
대기열에있는 메시지를 사용하는 앱이 여러 개인 경우 대기열은 오래된 메시지를 삭제할시기를 어떻게 알 수 있습니까?
Basil Bourque

95

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

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


41
답변을 읽은 후 '내가 올해 배울 내용'에 내 대기열에 JMS를 추가하겠습니다. :)
Roman

요즘에는 JMS 사양을 사용하는 대신 비동기 메서드 호출을 사용할 수 있습니다. 자세한 내용은 다음을 참조하십시오 : docs.oracle.com/javaee/6/tutorial/doc/gkkqg.html
geo

3
그들은 동일하지 않습니다. 비동기 메소드 호출로 보장 된 전달은 없습니다. 한 번에 여러 리스너에게 보낼 수있는 주제에 대한 개념이 없습니다.
duffymo 2014 년

75

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

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

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

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

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

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

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

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


5
디버그 로깅에 JMS를 사용하는 것은 옳지 않은 것 같습니다. 큐와 메시징에는 상당한 비용이 들며 로깅 (보통 많이 로깅하는 디버깅의 경우)은 가능한 한 빨라야합니다.
Marco Altieri

19

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


RestService Api가 동기식이므로 비동기 처리를 원합니다. ActiveMq 및 Jms로 수행하는 방법 stackoverflow.com/questions/19706788/... . 도와 주셔서 감사합니다
Kumar

10

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

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


8

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

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


1
이것 좀 도와주세요. stackoverflow.com/questions/19706788/... . 도와 주셔서 감사합니다.
Kumar

2
그러나 요청이 비동기이므로 네트워크 문제로 인해 메시지가 전송되지 않을 수 있습니다. 이건 어때? 물건을 사고 싶을 때는 질화를 보내야합니다. 그렇지 않습니까?
grep

8

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

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

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


6

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

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



5

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


4

신뢰할 수없는 네트워크를 통해 수많은 원격 사이트의 시스템과 통신하기 위해 JMS를 사용하고 있습니다. 안정적인 메시징과 결합 된 느슨한 결합은 안정적인 시스템 환경을 만듭니다. 각 메시지는 기술적으로 가능한 빨리 전송되며 네트워크의 더 큰 문제는 전체 시스템 환경에 영향을 미치지 않습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.