如何在 Azure ServiceBusTriggerAttribute 中指定具有 topic/subscription 的特定终结点?
How do I specify a particular endpoint with a topic/subscription in Azure ServiceBusTriggerAttribute?
我在我的 Azure 帐户中创建了一个服务总线主题 (my-topic)。我已经在该主题上创建了一个只听规则 (listen_rule),并且还订阅了该主题 (my-subscription) ,以便我的代码触发。
如何将特定的 subscription/rule 添加到 [ServiceBusTrigger]
?
在app.config中我有这个配置部分:
<add key="MySubscription" value="my-subscription" />
<add key="MyTopic" value="Endpoint=sb://XXXXXXX.servicebus.windows.net/;SharedAccessKeyName=listen_rule;SharedAccessKey=XXXX=;EntityPath=my-topic"/>
在我的代码中我有:
public async Task ProcessMyMessageAsync(
[ServiceBusTrigger("%MyTopic%", "%MySubscription%")]
BrokeredMessage brokeredMessage)
这会引发异常:
The entity path/name 'Endpoint=sb://XXXX.servicebus.windows.net/;SharedAccessKeyName=listen_rule;SharedAccessKey=XXXX=;EntityPath=topic' exceeds the '50' character limit.
我在网上找到了很多例子,其中有一个通用的 AzureWebJobsServiceBus
连接字符串,但它可以访问整个服务总线,我想将它锁定到这个特定的 topic/rule.
p.s。
我正在使用 .NET Framework 4.5.2(是的,我知道,这是一个旧应用程序)和 Microsoft.Azure.WebJobs.ServiceBus 2.0.0.
p.p.s。理想情况下,如果可能的话,我想在一个配置行中指定整个订阅。
试试这个,它将您的主题名称、订阅名称和服务总线连接字符串作为参数,
public async Task ProcessMyMessageAsync([ServiceBusTrigger("%MyTopic%","%MySubscription%", Connection = "ServiceBusEndPoint")]BrokeredMessage brokeredMessage)
并在您的应用程序设置中
<add key="MySubscription" value="my-subscription" />
<add key="MyTopic" value="my-topic"/>
<Add Key="ServiceBusEndPoint" value="Endpoint=sb://XXXXXXX.servicebus.windows.net/;SharedAccessKeyName=listen_rule;SharedAccessKey=XXXX="/>
如果这不起作用,请尝试在连接字符串中添加服务总线端点,而不是应该起作用的应用程序设置。
更新 Microsoft.Azure.WebJobs.ServiceBus 2.0.0.
使用可以在program.cs
这里设置服务总线连接字符串和存储连接字符串
`
static void Main()
{
var config = new JobHostConfiguration("your storage connection string ");
if (config.IsDevelopment)
{
config.UseDevelopmentSettings();
}
config.UseServiceBus(new ServiceBusConfiguration() { ConnectionString = "your servcebus connection string " });
var host = new JobHost(config);
// The following code ensures that the WebJob will be running continuously
host.RunAndBlock();
}
`
// 请将此 WebJob app.config 中的以下连接字符串设置为 运行:
// AzureWebJobsDashboard 和 AzureWebJobsStorage
获取service bus trigger有两种方式,一种是webjob,一种是azure function。我检查了 Microsoft.Azure.WebJobs.ServiceBus 2.0.0
包,看起来这个触发器不支持连接 属性。
我想您主要想使用 webjob sdk。下面是我的环境。
- Microsoft.Azure.WebJobs 2.0.0
- Microsoft.Azure.WebJobs.核心 2.0.0
- Microsoft.Azure.WebJobs.ServiceBus 2.0.0
在app.config中,我设置了AzureWebJobsServiceBus
连接。
<connectionStrings>
<add name="AzureWebJobsDashboard" connectionString="" />
<add name="AzureWebJobsStorage" connectionString="" />
<add name="AzureWebJobsServiceBus" connectionString="service bus connection string"/>
</connectionStrings>
下面是我的Program.cs.
using Microsoft.Azure.WebJobs;
namespace WebJob1
{
class Program
{
static void Main()
{
var config = new JobHostConfiguration();
config.UseServiceBus();
if (config.IsDevelopment)
{
config.UseDevelopmentSettings();
}
var host = new JobHost(config);
// The following code ensures that the WebJob will be running continuously
host.RunAndBlock();
}
}
}
下面是我的Function.cs。我使用 ServiceBusAccount
属性设置连接。我在这里找到它:Attributes and annotations.
using System.IO;
using Microsoft.Azure.WebJobs;
using Microsoft.ServiceBus.Messaging;
namespace WebJob1
{
public class Functions
{
[ServiceBusAccount("AzureWebJobsServiceBus")]
public static void ProcessQueueMessage([ServiceBusTrigger(topicName:"testtopic",subscriptionName:"testsub", access: AccessRights.Manage)] string message, TextWriter log)
{
log.WriteLine(message);
}
}
}
这是我的测试截图。
如果你想要的是azure功能可以参考官方教程:Create your first function using Visual Studio and this service bus binding(其他页面有触发信息)
希望这对您有所帮助,如果您还有其他问题,请随时告诉我。
我会自己回答这个问题,以防其他人发现这个问题:
我缺少连接字符串:
<connectionStrings>
<add name="AzureWebJobsMyEndPoint" connectionString="Endpoint=sb://XXXX.servicebus.windows.net/;SharedAccessKeyName=listen_rule;SharedAccessKey=XXXX"/>
</connectionStrings>
<appSettings>
<add key="MySubscription" value="subscription-name"/>
<add key="MyTopic" value="topic-name"/>
</appSetting>
我需要ServiceBusAccountAttribute
触发:
public async Task ProcessMyMessageAsync(
[ServiceBusAccount("MyEndPoint")]
[ServiceBusTrigger("%MyTopic%", "%MySubscription%", AccessRights.Listen)]
BrokeredMessage brokeredMessage)
请注意 ServiceBusAccount
如何使用 MyEndPoint,但连接字符串将其用作 AzureWebJobs 的后缀。
我在我的 Azure 帐户中创建了一个服务总线主题 (my-topic)。我已经在该主题上创建了一个只听规则 (listen_rule),并且还订阅了该主题 (my-subscription) ,以便我的代码触发。
如何将特定的 subscription/rule 添加到 [ServiceBusTrigger]
?
在app.config中我有这个配置部分:
<add key="MySubscription" value="my-subscription" />
<add key="MyTopic" value="Endpoint=sb://XXXXXXX.servicebus.windows.net/;SharedAccessKeyName=listen_rule;SharedAccessKey=XXXX=;EntityPath=my-topic"/>
在我的代码中我有:
public async Task ProcessMyMessageAsync(
[ServiceBusTrigger("%MyTopic%", "%MySubscription%")]
BrokeredMessage brokeredMessage)
这会引发异常:
The entity path/name 'Endpoint=sb://XXXX.servicebus.windows.net/;SharedAccessKeyName=listen_rule;SharedAccessKey=XXXX=;EntityPath=topic' exceeds the '50' character limit.
我在网上找到了很多例子,其中有一个通用的 AzureWebJobsServiceBus
连接字符串,但它可以访问整个服务总线,我想将它锁定到这个特定的 topic/rule.
p.s。 我正在使用 .NET Framework 4.5.2(是的,我知道,这是一个旧应用程序)和 Microsoft.Azure.WebJobs.ServiceBus 2.0.0.
p.p.s。理想情况下,如果可能的话,我想在一个配置行中指定整个订阅。
试试这个,它将您的主题名称、订阅名称和服务总线连接字符串作为参数,
public async Task ProcessMyMessageAsync([ServiceBusTrigger("%MyTopic%","%MySubscription%", Connection = "ServiceBusEndPoint")]BrokeredMessage brokeredMessage)
并在您的应用程序设置中
<add key="MySubscription" value="my-subscription" />
<add key="MyTopic" value="my-topic"/>
<Add Key="ServiceBusEndPoint" value="Endpoint=sb://XXXXXXX.servicebus.windows.net/;SharedAccessKeyName=listen_rule;SharedAccessKey=XXXX="/>
如果这不起作用,请尝试在连接字符串中添加服务总线端点,而不是应该起作用的应用程序设置。
更新 Microsoft.Azure.WebJobs.ServiceBus 2.0.0.
使用可以在program.cs
这里设置服务总线连接字符串和存储连接字符串`
static void Main()
{
var config = new JobHostConfiguration("your storage connection string ");
if (config.IsDevelopment)
{
config.UseDevelopmentSettings();
}
config.UseServiceBus(new ServiceBusConfiguration() { ConnectionString = "your servcebus connection string " });
var host = new JobHost(config);
// The following code ensures that the WebJob will be running continuously
host.RunAndBlock();
}
`
// 请将此 WebJob app.config 中的以下连接字符串设置为 运行: // AzureWebJobsDashboard 和 AzureWebJobsStorage
获取service bus trigger有两种方式,一种是webjob,一种是azure function。我检查了 Microsoft.Azure.WebJobs.ServiceBus 2.0.0
包,看起来这个触发器不支持连接 属性。
我想您主要想使用 webjob sdk。下面是我的环境。
- Microsoft.Azure.WebJobs 2.0.0
- Microsoft.Azure.WebJobs.核心 2.0.0
- Microsoft.Azure.WebJobs.ServiceBus 2.0.0
在app.config中,我设置了AzureWebJobsServiceBus
连接。
<connectionStrings>
<add name="AzureWebJobsDashboard" connectionString="" />
<add name="AzureWebJobsStorage" connectionString="" />
<add name="AzureWebJobsServiceBus" connectionString="service bus connection string"/>
</connectionStrings>
下面是我的Program.cs.
using Microsoft.Azure.WebJobs;
namespace WebJob1
{
class Program
{
static void Main()
{
var config = new JobHostConfiguration();
config.UseServiceBus();
if (config.IsDevelopment)
{
config.UseDevelopmentSettings();
}
var host = new JobHost(config);
// The following code ensures that the WebJob will be running continuously
host.RunAndBlock();
}
}
}
下面是我的Function.cs。我使用 ServiceBusAccount
属性设置连接。我在这里找到它:Attributes and annotations.
using System.IO;
using Microsoft.Azure.WebJobs;
using Microsoft.ServiceBus.Messaging;
namespace WebJob1
{
public class Functions
{
[ServiceBusAccount("AzureWebJobsServiceBus")]
public static void ProcessQueueMessage([ServiceBusTrigger(topicName:"testtopic",subscriptionName:"testsub", access: AccessRights.Manage)] string message, TextWriter log)
{
log.WriteLine(message);
}
}
}
这是我的测试截图。
如果你想要的是azure功能可以参考官方教程:Create your first function using Visual Studio and this service bus binding(其他页面有触发信息)
希望这对您有所帮助,如果您还有其他问题,请随时告诉我。
我会自己回答这个问题,以防其他人发现这个问题:
我缺少连接字符串:
<connectionStrings>
<add name="AzureWebJobsMyEndPoint" connectionString="Endpoint=sb://XXXX.servicebus.windows.net/;SharedAccessKeyName=listen_rule;SharedAccessKey=XXXX"/>
</connectionStrings>
<appSettings>
<add key="MySubscription" value="subscription-name"/>
<add key="MyTopic" value="topic-name"/>
</appSetting>
我需要ServiceBusAccountAttribute
触发:
public async Task ProcessMyMessageAsync(
[ServiceBusAccount("MyEndPoint")]
[ServiceBusTrigger("%MyTopic%", "%MySubscription%", AccessRights.Listen)]
BrokeredMessage brokeredMessage)
请注意 ServiceBusAccount
如何使用 MyEndPoint,但连接字符串将其用作 AzureWebJobs 的后缀。