2016-11-01 4 views
1

나는 확실히이게 무슨 뜻인지 이해가 안 :JMS 주제 시간 의존성

각 메시지는 다수의 가입자가있을 수 있습니다. 게시자와 구독자간에 존재하는 시간은 입니다. 주제 구독자는 구독을 만든 후에 이라는 메시지 만 사용할 수 있습니다.

"시간 의존성"이란 무엇을 의미합니까? 위의 내용은 "구독자는 구독이 생성 된 후에 만 ​​메시지를 소비 할 수 있습니다"라고 말하면서 가입자가 아직 생성되지 않은 메시지를 소비 할 수 없다는 것을 이해했기 때문에 여기서 중요한 것을 놓치고 있다고 생각합니다 (그러나이 상식은 아닙니다.).

Google에서 아무런 설명을 찾을 수 없으므로 도움을 주셔서 감사합니다.

편집 : YouTube에서 봄 부팅 및 기타 기술을 설명하는 훌륭한 채널을 발견했습니다. 특히이 video은 대기열과 주제 (내구성 가입자가 무엇인지)의 차이점을 이해하는 데 도움이되었습니다.

답변

1

"시간 의존성"이란 무엇을 의미합니까?

이 더 나은 이해가 NO 소비자가 없습니다을 만들었 경우에도 생산자 에서 발표 한 메시지 브로커 (TimeToLive 만료까지) 모든 메시지를 보존하는 에서 JMS 대기열과 비교합니다. 아무 가입자가 없습니다을 만든 경우

이제, JMS 주제로 오는 메시지 브로커는 생산자 발행 메시지을 보존하지 않습니다. 주제 구독의 생성, 당신은 내가 (topicSession.createDurableSubscriber를 사용하여 비 내구성과 주제 구독을 만들어 지금에서 게시이 주제에 대한 메시지를 느슨하게하고 싶지 않아 하는 메시지 브로커를 말할 수있는 동안

() 메소드). 다시 말하지만, 비 영구 가입의 경우에도 브로커는 TimeToLive 만료까지 (가입 생성 시간) 후에 게시 된 메시지를 보존합니다.

+0

비즈니스 컨텍스트에서 우리는 주 응용 프로그램의 변경 내용을 듣고 db를 추가/수정하는 데 필요한 springboot API를 가지고 있습니다. 이 경우 '영구 가입자'모델을 사용합니까? 주 응용 프로그램과 완전히 동일한 변경 내용을 수신하는 몇 가지 springboot 응용 프로그램이 있습니다. 따라서 별도의 대기열이 만들어지고 주 응용 프로그램은 동일한 메시지를 이러한 개별 대기열로 보냅니다. Topic 대신 Queue를 사용하는 이유가 혼란 스럽습니다. 비즈니스 컨텍스트없이 의견을 제시하는 것이 어려울 수도 있지만 귀하의 생각은 무엇입니까? – johnwick0831

+1

메시지 내용이 정확히 동일합니까? 대답이 '예'인 경우 많은 처리 능력이 필요하므로 주제에 한 번만 생성되므로 여러 대기열을 생성 할 의미가 없습니다. – developer

+0

예 메시지가 완전히 동일합니다. 다른 개발자에게 확인한 결과 주제가 비즈니스 제약 (돈 및 시간)으로 인해 변경되지 않는 것 같습니다. 답장을 보내 주셔서 감사합니다. – johnwick0831

0

소비자가 구독하기 전에 주제에 메시지를 게시하면 메시지가 표시되지 않습니다.

마찬가지로 영구 가입자와 관련이 있습니다. 일반 가입자는 브로커에 연결되어있는 동안에 만 메시지를 볼 수 있습니다. 구독자의 연결이 끊어지기 전이나 후에 모든 메시지가 구독자에게 표시되지 않습니다.

그러나 영구 가입을 사용하면 구독자가 연결을 끊을 수 있지만 브로커는 계속 해당 구독자를 대상으로 메시지를 보관합니다. 구독자가 다시 연결되면 저장된 모든 메시지와 새로운 메시지를 모두 가져옵니다.

+0

소비자가 의도적으로 가입하지 않아 메시지가 손실되는 실제적인 예가 있습니까? – johnwick0831

+0

구독자가없는 주제로 보낼 때 메시지가 손실 될 수있는 이유를 간단히 설명합니다. 기본적으로 그것은 가입자와 생산자 사이의 경쟁 조건입니다. 제작자가 이기면 메시지가 손실 될 수 있습니다. 또는 어떤 이유로 모든 가입자가 브로커와의 연결을 끊는 경우. –

관련 문제