2014-02-13 4 views
3

나는 새로운 Rabbit MQ 클라이언트를 사용하여 RabbitMQ 메시지를 소비 할 두 개의 동일한 사이트가 함께 RoutingKey을 사용하는 방법. 생산자는 이상적으로 대기열 이름 또는 라우팅 키로 사이트를 지정할 수 있어야합니다. 전자는 Publish 매개 변수로 할 수 있지만 후자는 액세스 할 수 없습니다. 또한 서비스 측면에서 소비자는 컨벤션 기반 큐 이름 (예 : mq.myrequest.inq) 만 구독 할 수있는 것으로 나타나며 라우팅 키를 활용할 수없는 것 같습니다.ServiceStack 및 RabbitMQ

내가 즉 mq.myrequest.site1.inq 명시 적 큐 이름에 따라 핸들러를 게시하고 구독 내 자신의 라우팅 키를 사용하거나 등록 할 수있는 방법이 있나요?

답변

2

없습니다. ServiceStack의 RabbitMq 지원은 일반적으로 유형 이름을 기반으로하며 작업 대기열로 작동하도록 독려받습니다. 이는 구성이 필요없고 사용하기 쉽도록 설계되었으므로 사용할 교환기, 라우팅 키 및 대기열 이름에 대한 세부 정보를 자동으로 처리합니다. 고급 또는 사용자 정의 구성을해야하는 경우

는 대신 직접 기본 RabbitMQ.Client를 사용하는 것이 가장 좋습니다.

+0

지금은 정적 QueueNames.SetQueuePrefix ("site1 :")를 사용하여 문제를 해결했지만 제안은 QueueNames와 QueueNames의 하위 클래스를 허용하여 대기열 이름 지정에 대한 제어권을 가질 수 있습니다. 큐 서버 생성자에 삽입 된 팩토리? 사용자가 QueueNames를 구현하면 큐 이름의 구성 요소 부분에 액세스 할 수 있으므로 같은 호스트에서 동일한 요청 유형이 사용되는 상황을 피할 수있는 mq.subpart.MyType.ext.inq와 같은 조합을 사용할 수 있습니다. –

+0

@NeilDobson 확인 [이 커밋 (https://github.com/ServiceStack/ServiceStack/commit/1b86fa3df6b40fa85520090f69d48e7f05d32f46) 도움이 될 것입니다. – mythz

+0

대단한 것 같습니다. 이 방법을 다르게 적용하여 코드를 포크했지만 솔루션은 훨씬 더 우아합니다. 나는 지금 살펴볼 것이다. –