У меня есть вопросы относительно жизненных циклов различных объектов Rebus, связанных с заявками на приложения для издателя и подписчика:
См. Ниже:
Издатель
1 Должен ли приведенный ниже код быть инициализирован один раз и только один раз за время существования приложения?
Например, приведенный ниже экземпляр BuiltinHandlerActivator инициализируется один раз и используется на протяжении всего жизненного цикла приложения?
using (var activator = new BuiltinHandlerActivator())
{
Log.Logger = new LoggerConfiguration()
.WriteTo.ColoredConsole()
.ReadFrom.Configuration(SerilogConfiguration)
.Enrich.WithProperty("App Name", "Rebus Publisher")
.CreateLogger();
Configure.With(activator)
.Logging(l =>
{
l.Serilog(Log.Logger);
})
.Transport(t => t.UseAzureServiceBus(Consts.ServiceBusConnectionString, Consts.Publisher))
.Options(o =>
{
o.Decorate<IErrorHandler>(c => new MyErrorHandler(c.Get<IErrorHandler>()));
o.SimpleRetryStrategy(maxDeliveryAttempts: 1, errorQueueAddress: "poison");
})
.Start();
2 Может ли несколько потоков одновременно вызывать и использовать activator
ниже?
Например, если поступает несколько запросов, среда выполнения функции Azure создает несколько экземпляров функции ниже, каждый из которыхкоторые обрабатывают запросы.
activator.Bus.Publish("test").Wait();
Subscriber1
Подобные вопросы относятся к издателю выше
1 Необходимо только один раз инициализировать приведенный ниже кододин раз за всю жизнь приложения?Например, приведенный ниже экземпляр BuiltinHandlerActivator инициализируется один раз и используется на протяжении всего жизненного цикла приложения?
using (var activator = new BuiltinHandlerActivator())
{
activator.Register(() => new Handler(MessageContext.Current));
Configure.With(activator)
.Logging(l => l.ColoredConsole(minLevel: LogLevel.Warn))
.Transport(t => t.UseAzureServiceBus(Consts.ServiceBusConnectionString, Consts.Subscriber1))
.Routing(r => r.TypeBased().MapAssemblyOf<string>(Consts.Publisher))
.Options(o =>
{
//consumer only
o.SimpleRetryStrategy(maxDeliveryAttempts: 2, errorQueueAddress: "poison");
//consumer only
o.SetNumberOfWorkers(7);
o.SetMaxParallelism(10);
}).Start();
2 Может ли несколько потоков одновременно вызывать и использовать активатор ниже?
Например, если поступает несколько запросов, среда выполнения функции Azure создает несколько экземпляров функции ниже, каждый из которых обрабатываетзапросы.
Обратите внимание, что и SetNumberOfWorkers, и SetMaxParallelism используются для Subscriber1.
activator.Bus.Subscribe<string>().Wait();