【发布时间】:2019-09-14 00:08:56
【问题描述】:
以下应用经过调整,可与 Azure 服务总线一起使用。 https://github.com/rebus-org/RebusSamples/tree/master/PubSub
但是,下面是创建的。
队列
错误
出版商
订阅者
主题
messages_datetimemessage__messages:订阅者
messages_stringmessage__messages:订阅者
messages_timespanmessage__messages:订阅者
我的问题
这是正确的吗?
是否可以减少创建的工件数量?例如,减少到只有一个主题,因为主题用于发布订阅。
更新
如果可能的话,我需要使用带有一个主题和一两个订阅的 Pub 子模式。
但是,下面出现错误:
System.AggregateException HResult=0x80131500 消息=一个或多个 发生错误。 (无法发布到主题“订单”)
源 = System.Private.CoreLib StackTrace:在 System.Threading.Tasks.Task.Wait(Int32 毫秒超时, CancellationToken 取消令牌)在 System.Threading.Tasks.Task.Wait() 在 Publisher.Program.Main() 中 C:_MyLab\ReBus\PubSub\Publisher\Program.cs:第 43 行内部异常 1:RebusApplicationException:无法发布到 主题“订单”
内部异常 2:InvalidOperationException:无法打开主题 实体类型队列的客户端。 TrackingId:5c380af2-ad8f-4788-85b8-5427dd7873e4_B4, SystemTracker:myapp:Queue:order, 时间戳:2019-04-29T22:31:57 TrackingId:9c3e0c40-4410-4102-a705-86a6528cd030_B4, SystemTracker:myapp:Queue:order, 时间戳:2019-04-29T22:31:57 TrackingId:401a15d284ad44989f5e451c963d81e5_G16, SystemTracker:gateway7, 时间戳:2019-04-29T22:31:57
UseAzureServiceBus 好像错了,因为它正在使用队列
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 似乎是错误的,因为它正在使用队列。 Handler能处理消息吗?
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);
}
}
上面的代码创建了一个订单队列,这不是我想要的。
我想要一个主题,以及一两个订阅。
【问题讨论】:
标签: rebus rebus-azureservicebus