Azure 服务总线上的 NServiceBus:无法启动订阅端点
NServiceBus on Azure Service Bus: unable to get subscribing endpoint to start
我正在尝试在 Azure 服务总线上获取一对 NSB 端点(一个事件发布者和一个事件订阅者)运行。
我已经通过 Azure 门户创建了服务总线和主题,我的发布者能够很好地将事件发布到主题。这是相关代码:
public static async Task Main()
{
var endpointConfiguration = new EndpointConfiguration(EndpointName);
endpointConfiguration.SendOnly();
var transport = endpointConfiguration.UseTransport<AzureServiceBusTransport>();
transport.ConnectionString(ServiceBusConnectionString);
transport.TopicName(TopicName);
var startableEndpoint = await Endpoint.Create(endpointConfiguration)
.ConfigureAwait(false);
var endpointInstance = await startableEndpoint.Start().ConfigureAwait(false);
var message = new MyMessage {Data = Guid.NewGuid().ToString()};
Console.WriteLine($"");
Console.WriteLine($"----------------");
Console.WriteLine($"Sending message ({message.Data})");
Console.WriteLine($"----------------");
Console.WriteLine($"");
await endpointInstance.Publish(message);
await endpointInstance.Stop().ConfigureAwait(false);
}
消息 class 位于共享程序集中:
namespace NsbAsbPoc.Messages
{
public class MyMessage : IEvent
{
public string Data { get; set; }
}
}
不过我无法为此消息设置订阅者。我试过以下方法:
public static async Task Main()
{
var endpointConfiguration = new EndpointConfiguration(EndpointName);
endpointConfiguration
.UseTransport<AzureServiceBusTransport>()
.ConnectionString(ServiceBusConnectionString)
.TopicName(TopicName);
endpointConfiguration.UsePersistence<InMemoryPersistence>();
var startableEndpoint =
await Endpoint.Create(endpointConfiguration).ConfigureAwait(false);
var endpointInstance = await startableEndpoint.Start().ConfigureAwait(false);
Console.ReadLine();
await endpointInstance.Stop().ConfigureAwait(false);
}
public class Handler : IHandleMessages<MyMessage>
{
public Task Handle(MyMessage message, IMessageHandlerContext context)
{
Console.WriteLine($"");
Console.WriteLine($"----------------");
Console.WriteLine($"Received message ({message.Data})");
Console.WriteLine($"----------------");
Console.WriteLine($"");
return Task.CompletedTask;
}
}
但我在启动时遇到以下错误:
ERROR NServiceBus.Features.AutoSubscribe AutoSubscribe was unable
to subscribe to event 'NsbAsbPoc.Messages.MyMessage': The messaging entity
'xxxx:Topic:rich-test-topic|rich-test-vs-receiver-nsb|NsbAsbPoc.Messages.MyMessage'
could not be found. TrackingId:150fa682-205a-4dc1-a2fb-af6ddf8c1b4f_B2, SystemTracker:NoSystemTracker, Timestamp:2019-07-23T14:25:16
请注意,在上面的消息中,我已经编辑了总线实例的名称。另请注意,rich-test-topic
是我的主题名称,rich-test-vs-receiver-nsb
是我的接收端点的名称。
我完全不知道如何继续,因为这个新版本的 NServiceBus.Transport.AzureServiceBus 库似乎几乎没有文档,也几乎没有示例。我不知道它在做什么;我应该手动配置订阅吗?我应该让 NSB 自己创建主题吗?端点名称有任何意义吗?
我正在尝试在 Azure 服务总线上获取一对 NSB 端点(一个事件发布者和一个事件订阅者)运行。
我已经通过 Azure 门户创建了服务总线和主题,我的发布者能够很好地将事件发布到主题。这是相关代码:
public static async Task Main()
{
var endpointConfiguration = new EndpointConfiguration(EndpointName);
endpointConfiguration.SendOnly();
var transport = endpointConfiguration.UseTransport<AzureServiceBusTransport>();
transport.ConnectionString(ServiceBusConnectionString);
transport.TopicName(TopicName);
var startableEndpoint = await Endpoint.Create(endpointConfiguration)
.ConfigureAwait(false);
var endpointInstance = await startableEndpoint.Start().ConfigureAwait(false);
var message = new MyMessage {Data = Guid.NewGuid().ToString()};
Console.WriteLine($"");
Console.WriteLine($"----------------");
Console.WriteLine($"Sending message ({message.Data})");
Console.WriteLine($"----------------");
Console.WriteLine($"");
await endpointInstance.Publish(message);
await endpointInstance.Stop().ConfigureAwait(false);
}
消息 class 位于共享程序集中:
namespace NsbAsbPoc.Messages
{
public class MyMessage : IEvent
{
public string Data { get; set; }
}
}
不过我无法为此消息设置订阅者。我试过以下方法:
public static async Task Main()
{
var endpointConfiguration = new EndpointConfiguration(EndpointName);
endpointConfiguration
.UseTransport<AzureServiceBusTransport>()
.ConnectionString(ServiceBusConnectionString)
.TopicName(TopicName);
endpointConfiguration.UsePersistence<InMemoryPersistence>();
var startableEndpoint =
await Endpoint.Create(endpointConfiguration).ConfigureAwait(false);
var endpointInstance = await startableEndpoint.Start().ConfigureAwait(false);
Console.ReadLine();
await endpointInstance.Stop().ConfigureAwait(false);
}
public class Handler : IHandleMessages<MyMessage>
{
public Task Handle(MyMessage message, IMessageHandlerContext context)
{
Console.WriteLine($"");
Console.WriteLine($"----------------");
Console.WriteLine($"Received message ({message.Data})");
Console.WriteLine($"----------------");
Console.WriteLine($"");
return Task.CompletedTask;
}
}
但我在启动时遇到以下错误:
ERROR NServiceBus.Features.AutoSubscribe AutoSubscribe was unable
to subscribe to event 'NsbAsbPoc.Messages.MyMessage': The messaging entity
'xxxx:Topic:rich-test-topic|rich-test-vs-receiver-nsb|NsbAsbPoc.Messages.MyMessage'
could not be found. TrackingId:150fa682-205a-4dc1-a2fb-af6ddf8c1b4f_B2, SystemTracker:NoSystemTracker, Timestamp:2019-07-23T14:25:16
请注意,在上面的消息中,我已经编辑了总线实例的名称。另请注意,rich-test-topic
是我的主题名称,rich-test-vs-receiver-nsb
是我的接收端点的名称。
我完全不知道如何继续,因为这个新版本的 NServiceBus.Transport.AzureServiceBus 库似乎几乎没有文档,也几乎没有示例。我不知道它在做什么;我应该手动配置订阅吗?我应该让 NSB 自己创建主题吗?端点名称有任何意义吗?