2014-05-23 5 views
2

MSMQ를 통해 MassTransit을 구성하려고합니다.MassTransit의 Subscription Service가 단일 실패 지점입니다.

  • I 1 개 이상의 서브넷 및
  • 내가 필요를 통해 통신하고있어 그렇게하지 무엇 지속적인 구독

을 : 나는 때문에 멀티 캐스트를 사용할 수 없기 때문에 가입 서비스를 사용할 필요가 구독 서비스가 실행되고 있지 않으면 버스 인스턴스를 초기화 할 수 없도록 시스템이 설계된 이유를 이해해야합니다. 지연 후 "구독 서비스가 응답하기를 기다리는 시간 초과"가 표시됩니다.

메시지 대기열이라는 개념에 반대하여 수신자가 사용 가능할 때까지 메시지가 유지된다고 생각했습니다. 구독 서비스와의 통신은 mt_subscriptions 큐를 통해 이루어졌으며 시작은 구독 서비스 실행에 의존하지 않을 것이라고 생각했습니다.

+0

여기에 대한 해결책이 있습니까? 나는 같은 문제를 다룬다 –

+0

나는 대중 교통을 포기하고 nservicebus로 이사했다. 그래서 나는 당신에게 안내를 줄 수 없다. 죄송합니다 – Aheho

+0

당신의 경험은 어떠 했습니까? –

답변

1

따라서 구독 서비스는 구독을 유지하고 관리하는 방법입니다. 실행되지 않으면 메시지를 라우트해야하는 위치를 알릴 방법이 없습니다. 또한 구독 저장이 이루어지는 유일한 장소이기도합니다. 원하는 경우 정적 라우팅을 수행하고 모든 것을 수동으로 구성 할 수 있습니다. 그러나 하루가 끝나면 MSMQ는 pub/sub에 대한 추가 인프라가 필요합니다. 그 주위에 방법이 없습니다.

타임 아웃이 표시되는 이유는 MT가 시작될 때 "이봐, 여기있다. 여기 내 소비자가있다. 버스에서 다른 소비자는 무엇인가?" 따라서 구독 서비스는 적시에 해당 정보를 반환해야합니다. 구독이 등록되어 있지 않으면 메시지가 도움이된다는 것이 아니라 잃어 버렸습니다.

더 쉽게하려면 RabbitMQ를 사용해야합니다. RMQ 내의 교환 바인딩이 당신을 대신해서 처리하므로 구독 서비스가 필요하지 않습니다.

+0

당신이 말하는 것이 정확하다면 구독 서비스는 단일 실패 지점입니다. 동일한 MassTransit 인프라에서 2 개의 가입 서비스 인스턴스를 실행할 수있는 방법이 있습니까? – Aheho

+0

장애 조치를 위해 Windows 클러스터를 실행해야합니다. MSMQ로 처리하는 유일한 방법입니다. 서비스가 실행되면 구독 서비스에 장애가 발생해도 새로운 사람이 아무도 버스에 등록 할 수 없다는 것을 의미합니다.기존 멤버는 중단되지 않는 한 계속 실행됩니다. – Travis

1

대개 의심되는 것처럼 메시지가 대기열에 추가되고 있지만 다른 쪽에서 구독 서비스를 기대하기 때문에 오류 처리가 특정 오류 메시지를 울립니다. 어쩌면 버스 인스턴스를 초기화 할 수없는 이유는 버스의 다른 끝 (구독 서비스)에서 다른 것을 감지하지 못하기 때문에 메시지를 보내지 않기 때문입니다.

구독 서비스는 아마도 중개자의 역할을 수행하며 메시지를 보낼시기와 위치를 결정합니다. 따라서 오류없이 mt_subscriptions 내에 메시지를 대기열에 넣으려면 구독 서비스가 실행 중이어야합니다.

+1

Masstransit에 대한 실무 지식이 있습니까? 아니면 추측입니까? – Aheho

+0

저는 일부 응용 프로그램에서 MSMQ를 사용했지만 MassTransit은 사용하지 않았습니다. MassTransit을 살펴 봤는데, 내가 말하는 말은 옳다고 생각합니다. MSMQ는 통신에 MSMQ를 사용하기 때문에 MSMQ에 명시된 규칙을 따라야합니다. MSMQ에 대한 필자의 이해를 바탕으로 메시지를 라우팅 할 위치를 결정할 구독 서비스가 필요합니다. – OverShock192736