如何使用 Microsoft.Azure.ServiceBus 在订阅上创建 MessageReceiver

Yur*_*hov 1 c# azureservicebus .net-standard

我正在尝试用 .NET Standard Microsoft.Azure.ServiceBus 替换 .NET Framework NuGet 包 WindowsAzure.ServiceBus,但我遇到了这个问题。如何为服务总线主题订阅创建 MessageReceiver 的实例?我可以使用以下代码为队列创建它:

var receiver = new MessageReceiver(connectionString, queueName);
var bytes = receiver.ReceiveAsync().Result.Body;
string s = Encoding.UTF8.GetString(bytes);
Console.WriteLine(s);
Run Code Online (Sandbox Code Playgroud)

但 MessageReceiver 没有用于从服务总线主题订阅获取数据的构造函数。

Yur*_*hov 7

我在 Microsoft.Azure.ServiceBus 源代码中找到了答案。原来,EntityNameHelper 类中有静态函数可以生成消息传递实体路径。例如,对于订阅,它看起来像

EntityNameHelper.FormatSubscriptionPath(topicName, subscriptionName)
Run Code Online (Sandbox Code Playgroud)

因此,完整的 MessageReceiver 初始化代码如下所示:

string path = EntityNameHelper.FormatSubscriptionPath(topicName, subscriptionName);
var receiver = new MessageReceiver(connectionString, path);
var bytes = receiver.ReceiveAsync().Result.Body;
string s = Encoding.UTF8.GetString(bytes);
Console.WriteLine(s);
Run Code Online (Sandbox Code Playgroud)