2016-09-19 4 views
1

MassTransit과 함께 localhost에서 작동하는 기본 데모 pub/sub 어플리케이션을 만들었습니다.라운드 로빈 패턴을 비활성화하고 MassTransit에서 팬 아웃 사용

내가 원하는 것은 메시지를 게시하고 모두이고 구독자는 메시지를 받아야합니다.

현재 내 환경에서는 게시자 앱 1 개와 구독자 앱 2 개가 시작됩니다. 그러나 메시지를 게시 할 때 구독자는 차례로 메시지를받습니다.

팬 아웃 교환 유형이 기본값이라고 생각하십니까? 그러나 라운드 로빈 패턴을 적용합니다.

나는

명시 적으로
config.ExchangeType = ExchangeType.Fanout; 

을 추가하지만, 소비자들은

내 술집/서브 코드 ... 하나 하나 여전히 메시지가 나타납니다

이 게시 :

var bus = Bus.Factory.CreateUsingRabbitMq(config => 
{ 
    config.Host(new Uri("rabbitmq://localhost/"), h => { }); 
    config.ExchangeType = ExchangeType.Fanout; 
}); 
var busHandle = bus.Start(); 
bus.Publish<SomethingHappened>(message); 

가입자는이 코드를 사용 :

var bus = Bus.Factory.CreateUsingRabbitMq(config => 
{ 
    var host = config.Host(new Uri("rabbitmq://localhost/"), h => { }); 
    config.ReceiveEndpoint(host, "MassTransitExample_Queue", e => e.Consumer<SomethingHappenedConsumer>()); 
}); 

var busHandle = bus.Start(); 
Console.ReadKey(); 
busHandle.Stop(); 

답변

2

내가 큐 이름은 고유해야 함을 발견 아래 기사를 읽고

https://www.maldworth.com/2015/10/27/masstransit-send-vs-publish/

당신의 버스를 구축하고과 같이 엔드 포인트를 등록 : sbc.ReceiveEndpoint (...), queueName 매개 변수가 고유해야합니다.

그래서 내 가입자 코드는 이제 다음과 같습니다

var bus = Bus.Factory.CreateUsingRabbitMq(config => 
{ 
    var host = config.Host(new Uri("rabbitmq://localhost/"), h => { }); 
    config.ReceiveEndpoint(host, "MTExQueue_" + Guid.NewGuid().ToString(), e => e.Consumer<SomethingHappenedConsumer>()); 
}); 

var busHandle = bus.Start(); 
Console.ReadKey(); 
busHandle.Stop();