Приложение, приведенное ниже, настроено для работы с служебной шиной Azure.https://github.com/rebus-org/RebusSamples/tree/master/PubSub
Однако ниже созданы.
Очереди
Ошибка
Издатель
Подписчик
Темы
messages_datetimemessage__messages: подписчик
messages_stringmessage__messages: подписчик
messages_timespanmessage__messages: subscriber
Мой вопрос
это правильно?
И можно ли уменьшить количество создаваемых артефактов?Например, уменьшите только до одной темы, потому что тема используется для публикации sub.
Обновление
Мне нужно использовать шаблон публикации Pub с одной темой и одной или двумяподписки, если это возможно.
Однако ниже приведена ошибка:
System.AggregateException HResult = 0x80131500 Сообщение = Произошла одна или несколько ошибок.(Невозможно опубликовать в теме 'order')
Source = System.Private.CoreLib StackTrace: at System.Threading.Tasks.Task.Wait (Int32 миллисекундTimeout, CancellationToken cancellationToken) в System.Threading.Tasks.Task.Wait () в Publisher.Program.Main () в C: _MyLab \ ReBus \ PubSub \ Publisher \ Program.cs: строка 43
Внутреннее исключение 1: RebusApplicationException: Не удалось опубликовать в теме 'order'
Внутреннее исключение 2: InvalidOperationException: Невозможно открыть клиент Темы для очереди типа объекта.Идентификатор отслеживания: 5c380af2-ad8f-4788-85b8-5427dd7873e4_B4, SystemTracker: myapp: Очередь: заказ, метка времени: 2019-04-29T22: 31: 57 Идентификатор отслеживания: 9c3e0c40-4410-4102-a705-86a6528cd030_Bue: заказ системы: Трасса, Метка времени: 2019-04-29T22: 31: 57 TrackingId: 401a15d284ad44989f5e451c963d81e5_G16, SystemTracker: gateway7, метка времени: 2019-04-29T22: 31: 57
UseAzureServiceBus
кажется неправильным, поскольку он используетqueue
class Publisher
{
static void Main()
{
using (var activator = new BuiltinHandlerActivator())
{
Configure.With(activator)
.Logging(l => l.ColoredConsole(minLevel: LogLevel.Warn))
.Transport(t => t.UseAzureServiceBus(Consts.ServiceBusConnectionString, Consts.Order))
.Start();
activator.Bus.Advanced.Topics.Publish(Consts.Order, new StringMessage("Hello there, I'm a publisher!")).Wait();
}
}
UseAzureServiceBus
кажется неправильным, потому что использует очередь.Может ли обработчик обрабатывать сообщения?
class Subscriber
{
static void Main()
{
using (var activator = new BuiltinHandlerActivator())
{
activator.Register(() => new Handler());
Configure.With(activator)
.Logging(l => l.ColoredConsole(minLevel: LogLevel.Warn))
.Transport(t => t.UseAzureServiceBus(Consts.ServiceBusConnectionString, Consts.Order))
.Routing(r => r.TypeBased().MapAssemblyOf<StringMessage>(Consts.Order))
.Start();
activator.Bus.Advanced.Topics.Subscribe(Consts.Order);
Console.WriteLine("This is Subscriber 1");
Console.WriteLine("Press ENTER to quit");
Console.ReadLine();
Console.WriteLine("Quitting...");
}
}
}
class Handler : IHandleMessages<StringMessage>, IHandleMessages<DateTimeMessage>, IHandleMessages<TimeSpanMessage>
{
public async Task Handle(StringMessage message)
{
Console.WriteLine("Got string: {0}", message.Text);
}
public async Task Handle(DateTimeMessage message)
{
Console.WriteLine("Got DateTime: {0}", message.DateTime);
}
public async Task Handle(TimeSpanMessage message)
{
Console.WriteLine("Got TimeSpan: {0}", message.TimeSpan);
}
}
Приведенный выше код создает очередь заказов, а это не то, что мне нужно.
Я хочу тему и одну или две подписки.