타사 제품의 메시지를 포함 할 수있는 대기열이있는 데이터베이스가 있습니다. 이 메시지를 처리를 위해 내 버스로 가져오고 싶습니다. NServiceBus를 사용하여이 작업을 수행 할 수 있다고 생각하지만 모니터 할 데이터베이스 대기열에 대한 구성이있는 단일 Windows 서비스에서 가져 오는 모든 메시지를 호스트하고 싶습니다.단일 창 서비스의 다중 NServiceBus 호스트
1)) 버스 2 상 오기 메시지 3으로 변환) 각 NServiceBus 주기적 데이터베이스 큐를 폴링하도록 구성 될 버스 메시지
보내기 다음
처리 단계
이다. 메시지가 도착하면 Bus.SendLocal을 수행하여 1 단계를 수행합니다.NSB 호스트는 메시지 처리기로 프로세스를 수신합니다. 이 메시지 핸들러 내에서 메시지 변환이 발생합니다. 마지막으로 실제 버스 메시지가 전송됩니다. 일반적인 config는 대상 호스트를 처리합니다.
하나의 Windows 서비스 내에 여러 개의 NSB 호스트를 배치 할 수 있는지 여부와 관련하여 문제가 있는지 알고 싶습니다. 모든 호스트가 동일한 구성을 공유해야한다고 생각합니다. (이 제한 사항에 만족합니다.) 맞습니까?
여러 호스트가 'no-no'인 경우 나의 대안은 버스 참조 (싱글 톤)가있는 윈도우 서비스를 갖는 것입니다. TPL 태스크는 데이터베이스 큐를 모니터 한 다음 버스를 사용하여 데이터베이스 메시지를 가져옵니다. 별도의 NServiceBus가 가져온 데이터베이스 메시지를 처리하고 변환을 수행하고 다른 호스트로 전송합니다.
질문의 길이는 죄송합니다.
안녕하세요, 혼란에 대해 죄송합니다. 호스트는 다음과 같은 기능을 수행합니다. 1) 데이터베이스 대기열 모니터 2) 메시지를 게시 할 버스에 대한 참조 3) 버스로 보내기 전에 메시지 처리를위한 메시지 처리기 클래스를 가질 수있는 기능. 각 스레드는 NServiceBus 호스트의 인스턴스를 포함합니다. – user634266
IHandleMessages를 추가하여 하나의 호스트에 많은 메시지 처리기를 가질 수 있다는 것을 알고 있습니다. 이 질문은 하나의 Windows 프로세스에서 여러 개의 NServiceBus 호스트를 각각 별도의 스레드에 호스팅 할 수 있는지 또는 각 호스트를 각각의 서비스에 포함시킬 수 있습니까? – user634266
나는 왜 당신이 별도의 호스트가 필요 하겠는가에 대해서는 여전히 불명확하다. 난 당신이 단지 데이터베이스를 모니터링하고 버스 (또는 이벤트를 게시) 명령을 보내 여러 개의 배경 스레드를 원하는 것 같아요. –