JMS 토픽 및 큐


191

JMS 대기열과 JMS 주제의 차이점이 무엇인지 궁금합니다.

ActiveMQ 페이지 말한다

토픽

JMS에서 주제는 공개 및 구독 시맨틱을 구현 합니다. 메시지를 게시하면 관심있는 모든 구독자에게 전달되므로 많은 구독자에게 0이 메시지 사본을 수신합니다. 브로커가 메시지를 수신 할 때 활성 구독이있는 가입자 만 메시지 사본을받습니다.

대기열

JMS 큐는 로드 밸런서 의미를 구현 합니다. 정확히 하나의 소비자가 단일 메시지를받습니다. 메시지가 전송 될 때 사용 가능한 소비자가 없으면 메시지를 처리 ​​할 수있는 소비자가 사용 가능할 때까지 유지됩니다. 소비자가 메시지를 받고 닫기 전에 승인하지 않으면 메시지가 다른 소비자에게 다시 배달됩니다. 대기열 에는 사용 가능한 소비자에 대해 메시지 로드 밸런싱 이있는 많은 소비자가있을 수 있습니다 .

ActiveMQ 브로커가 메시지를 수신 한 순서와 동일한 순서로 각 가입자에게 메시지 사본을 보내는 '무언가'를 원합니다.

이견있는 사람?

답변:


147

그것은 주제가 적절하다는 것을 의미합니다. 큐는 메시지가 하나의 가능한 가입자에게만 전달됨을 의미합니다. 주제는 각각의 모든 구독자에게 전달됩니다.


4
JMS 또는 WSO2 MB의 큐에 대해로드 밸런싱이 어떻게 작동합니까?
Kulasangar

그것은 내가 일부 가입자를 디버깅하려고했기 때문에 흥미롭고 주제를 보낼 때 가입자가 호출되지 않았지만 대기열로 보낼 때 작동했습니다
vmrvictor

54

주제는 발행자-구독자 모델에 대한 것이고 큐는 지점간에 대한 것입니다.


31

JMS 주제는 분포의 1 일대 모델에서 대상의 유형입니다. 모든 게시 된 구독자 가 동일한 게시 메시지를받습니다 . 이것을 '브로드 캐스트'모델이라고도합니다. 분산 컴퓨팅 에 대한 옵저버 디자인 패턴 에서 주제 와 주제와 동등한 주제를 생각할 수 있습니다 . 일부 JMS 제공 업체는이를 TCP 대신 UDP로 구현하도록 효율적으로 선택합니다. 주제의 경우 메시지 전달은 '화재'입니다. 아무도 듣지 않으면 메시지가 사라집니다. 그것이 원하는 것이 아니라면 '내구성 구독'을 사용할 수 있습니다.

JMS 큐는 메시지 일대일 대상이다. 메시지는 소비 수신자 중 하나만 수신합니다 (주목 : '토픽 클라이언트의 구독자 및 큐 클라이언트의 수신자 를 지속적으로 사용하여 혼동을 피하십시오). 대기열로 전송 된 메시지는 누군가가 가져 오거나 만료 될 때까지 디스크 또는 메모리에 저장됩니다. 따라서 대기열 (및 영구 가입)에는 일부 활성 스토리지 관리가 필요하므로 느린 소비자에 대해 생각해야합니다.

대부분의 환경에서는 아키텍처를 변경하지 않고도 항상 추가 구성 요소를 추가 할 수 있기 때문에 주제가 더 나은 선택 이라고 주장 합니다. 추가 된 구성 요소는 모니터링, 로깅, 분석 등이 될 수 있습니다. 프로젝트 시작시 1 년, 5 년, 10 년 동안 요구 사항이 어떻게 될지 알 수 없습니다. 변화는 불가피합니다. 포용하십시오 :-)


28

그것은 간단합니다 :

대기열 = 삽입> 철회 (단일 가입자에게 전송) 1 : 1

주제 = 삽입> 브로드 캐스트 (모든 가입자에게 전송) 1 : n

여기에 이미지 설명을 입력하십시오


2
간단한 소셜 네트워크를 예로들 수 있습니다. 누군가 게시물을 '좋아합니다'. 백엔드는 주제에 'POST LIKE'이벤트를 공개합니다. 구독자 3 명 : notificationProcessor(포스터에게 알림을 보냄), karmaProcessor(카르마를 좋아하는 사람과 포스터에 제공), feedProcessor(사람의 피드로 t을 위로 움직입니다). 물론 모든 비동기식.
Siddhartha

@Siddhartha, 이것은 예에 싸인 답변 일 수 있습니다, 감사합니다!
selem mn


7

대기열

찬성

  • 투명한 통신 흐름을 가진 간단한 메시징 패턴
  • 메시지를 대기열에 다시 넣어서 복구 할 수 있습니다

단점

  • 한 명의 소비자 만 메시지를받을 수 있습니다
  • 일대일 관계이므로 생산자와 소비자 사이의 연결을 의미합니다

토픽

찬성

  • 여러 소비자가 메시지를받을 수 있음
  • 생산자와 소비자의 분리 (게시 및 구독 패턴)

단점

  • 더 복잡한 통신 흐름
  • 단일 리스너에 대한 메시지를 복구 할 수 없습니다

4

N 소비자가있는 경우 :

JMS 토픽은 N의 N에 메시지를 전달 JMS 큐는 N의 N에 메시지를 전달

"ActiveMQ 브로커가 메시지를 수신 한 순서와 동일한 순서로 각 가입자에게 메시지 사본을 보내는 '사물'을 찾고 있습니다."

따라서 모든 N 가입자에게 메시지 사본을 제공하기 위해 주제를 사용하려고합니다.


1

주제 :: 주제는 일대 다 커뮤니케이션입니다 ... (다 지점 또는 게시 / 구독) 예 : 게시자가 youtub에 영화를 게시하면 모든 구독자에게 알림이 전송됩니다 .... QUEVE :: queve는 일대일입니다. -하나의 통신 ... 예 :-충전 요청을 게시 할 때 한 번의 요청으로 만 이동합니다 ... 요청이 모든 qreceiver로 이동하면 여러 번의 충전이 발생하여 응용 프로그램에 적합한 분석을 개발하는 동안 항상 기억하십시오.


-1

큐는 구독자가 소비하기를 기다리는 메시지를 보관하는 데 사용되는 JMS 관리 객체입니다. 모든 가입자가 메시지를 사용하면 메시지가 대기열에서 제거됩니다.

주제는 메시지가 게시 될 때 주제의 모든 구독자가 동일한 메시지를 수신한다는 것입니다.


2
대기열 메시지 만 소모됩니다 한 번 a로 하나의 이유는 큐가 구현하는로드 밸런서의 그, 소비자. 주제 구독 할 수 있습니다 내구성 : (가입자가 종료하고, 예를 들어, 다시 오는 경우) 가입자가 발행 후 긴 메시지를받을 수 있습니다.
Gruber
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.