Я пытаюсь внедрить доказательство шины служебного обслуживания, используя MassTransit. У меня есть три приложения, которые должны сообщать об изменениях общего типа сущностей между собой. Поэтому, когда пользователь обновляет объект в одном приложении, два других уведомления.Подписки MassTransit и получение собственных сообщений
Каждое приложение имеет следующую конфигурацию со своей очереди:
bus = ServiceBusFactory.New(sbc =>
{
sbc.UseMsmq();
sbc.VerifyMsmqConfiguration();
sbc.ReceiveFrom("msmq://localhost/app1_queue");
sbc.UseSubscriptionService("msmq://localhost/subscription");
sbc.UseControlBus();
sbc.Subscribe(subs =>
{
subs.Handler<IMessage1>(IMessage1_Received);
});
});
Существует также приложение подписки на услугу настраивается следующим образом:
subscriptionBus = ServiceBusFactory.New(sbc =>
{
sbc.UseMsmq();
sbc.VerifyMsmqConfiguration();
sbc.ReceiveFrom("msmq://localhost/subscription");
});
var subscriptionSagas = new InMemorySagaRepository<SubscriptionSaga>();
var subscriptionClientSagas = new InMemorySagaRepository<SubscriptionClientSaga>();
subscriptionService = new SubscriptionService(subscriptionBus, subscriptionSagas, subscriptionClientSagas);
subscriptionService.Start();
Проблема в том, что, когда один из приложений, публикует сообщение, все три приложения получают его (включая исходного отправителя).
Есть ли способ избежать этого (не прибегая к добавлению имени приложения в сообщение)?
Спасибо,
G
Чтобы отправить напрямую: вместо вызова .Publish() на шине, получите (используя IEndpointFactory) конечную точку, к которой вы хотите отправить ее, и вызовите .Send() на нем. –
Спасибо, я уже фильтровал сообщения на основе источника сообщений, но у вас есть. Фильтр Selected.Accept - полезный совет! –
gareththegeek
Я выполнил свой класс потребительского потребления. Выбран и реализован метод Accept, однако метод никогда не вызывается. Потребитель расходует все сообщения. Я пропустил? –
gareththegeek