Я использую Rebus, и я хочу представить что-то вроде описанного в CQRS Journey в пункте «Избегайте обработки событий несколько раз», но я не могу понять это.Как настроить Rebus на темы, основанные на типах обработчиков
Я настроены использовать Головоломки SQL Server для транспорта и MongoDB для Подписки и саг. Маршрутизация сконфигурирована TypeBased и отображает все типы обработчиков команд в очередь, сконфигурированную в Транспорт.
var bus = Configure.With(new SimpleInjectorContainerAdapter(container))
.Logging(l => l.Trace())
.Transport(t =>
{
t.UseSqlServer(connectionstring, "TestMessages", "messageQueueName");
})
.Routing(r => r.TypeBased()
.MapAssemblyOf<Assembly1.Commands.DoSomething>("messageQueueName")
.MapAssemblyOf<Assembly2.Commands.DoSomethingElse>("messageQueueName")
)
.Sagas(s => s.StoreInMongoDb(db, (sagaType) =>
{
return sagaType.Name;
}))
.Subscriptions(s => s.StoreInMongoDb(db, "Subscriptions"))
.Options(o =>
{
o.SetNumberOfWorkers(1);
o.SetMaxParallelism(1);
o.EnableSagaAuditing().StoreInMongoDb(db, "Snapshots");
})
.Start();
Теперь я должен настроить в Головоломки таким образом, что, когда команда Опубликовать событие, это тиражируется как множество отдельных тем (виртуальных или физических очередей), как типы существующих абонентов.
Что-то вроде:
bus.Subscribe<Assembly1.EventHandler1>("Assembly1.EventHandler1Queue").Wait();
bus.Subscribe<Assembly1.EventHandler2>("Assembly1.EventHandler2Queue").Wait();
bus.Subscribe<Assembly2.EventHandler1>("Assembly2.EventHandler1Queue").Wait();
Спасибо за помощь.
вы помечено вопроса с 'лазури-ServiceBus-topics' и вы ссылаетесь статья о том, как использовать (среди прочего) Azure Service Bus тема для реализации паба/sub .... но у вас есть con понял, что ваша шина использует SQL Server в качестве очереди сообщений - это намеренно? – mookid8000
Я просто добавил этот тег, потому что я не могу вставить «тему/темы» в качестве нового тега. – ilcorvo