我已经在我的Azure帐户中创建了服务总线主题( my-topic )。我已经针对该主题创建了一个仅监听规则( listen_rule ),还创建了对该主题的订阅( my-subscription ),以触发我的代码。>
如何将特定的订阅/规则添加到[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)
这将引发异常:
实体路径/名称'Endpoint = sb://XXXX.servicebus.windows.net/; SharedAccessKeyName = listen_rule; SharedAccessKey = XXXX =; EntityPath = topic'超出了'50'字符限制。
我在网络上发现了很多示例,这些示例中有一个通用的AzureWebJobsServiceBus
连接字符串,但是可以访问整个服务总线,我想将其锁定在这个特定的主题/规则中。 / p>
p.s。 我正在使用.NET Framework 4.5.2(是的,我知道,它是一个旧应用程序)和Microsoft.Azure.WebJobs.ServiceBus 2.0.0。
p.p.s。理想情况下,如果可能的话,我想在一个配置行中指定整个订阅。
答案 0 :(得分:0)
尝试一下,它将您的主题名称,订阅名称和servicebus连接字符串作为参数,
Finance
Admin
Rahul
以及您的应用设置
Note: You should click 'run' button to execute the program.
如果这不起作用,请尝试在连接字符串中添加servicebusendpoint,而不是应该起作用的应用程序设置。
Microsoft.Azure.WebJobs.ServiceBus 2.0.0的更新。
use可以在program.cs中在此处设置服务总线连接字符串和存储连接字符串
`
public async Task ProcessMyMessageAsync([ServiceBusTrigger("%MyTopic%","%MySubscription%", Connection = "ServiceBusEndPoint")]BrokeredMessage brokeredMessage)
//请在app.config中设置以下连接字符串以使该WebJob运行: // AzureWebJobsDashboard和AzureWebJobsStorage
答案 1 :(得分:0)
有两种获取服务总线触发器的方法,一种是webjob,另一种是Azure函数。我检查了Microsoft.Azure.WebJobs.ServiceBus 2.0.0
软件包是否看起来像该触发器不支持connection属性。
大多数情况下,我想您想使用webjob sdk。所以下面是我的环境。
在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);
}
}
}
这是我的测试屏幕截图。
如果您要使用天蓝色函数,可以参考官方教程:Create your first function using Visual Studio和此service bus binding(其他页面包含触发信息)
希望这可以为您提供帮助,如果您还有其他问题,请随时告诉我。
答案 2 :(得分:0)
如果其他人发现此问题,我将自己回答:
我缺少连接字符串:
<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 的后缀。