ServiceBusTrigger WebJob的不同服务总线连接字符串

Rob*_*Roe 3 azure azureservicebus azure-webjobs azure-webjobssdk

我有一个WebJob,它从事件主题中读取消息,处理它们,然后在不同的主题上创建消息.

我可以使用服务总线触发器轻松实现这一点.

public void EventSubscriptionToNotificationTopic(
        [ServiceBusTrigger(Subscribe.TopicName, Subscribe.SubscriptionName)] BrokeredMessage input,
        [ServiceBus(Publish.TopicName)] out BrokeredMessage output)
Run Code Online (Sandbox Code Playgroud)

为此,我们必须使用服务总线连接字符串,该字符串包含一个共享访问密钥,该密钥允许在可以访问这两个主题(root)的级别上发送和侦听权限.

我们希望能够使用不同的连接字符串/ SAS令牌锁定我们在这些主题上所需的权限(监听事件主题订阅和发送主题以发布到).

是否可以指定服务总线触发器或属性将使用哪个连接?

如果不是我必须自己滚动,可能只是使用服务总线触发器和WebJob连接字符串来读取消息,然后使用TopicClient在发布主题上创建新消息?

Tho*_*mas 7

有一个ServiceBusAccountAttribute允许您指定要使用的连接字符串.你还需要指定AccessRights:

所以你的代码看起来像这样:

public void EventSubscriptionToNotificationTopic(
    [ServiceBusTrigger(Subscribe.TopicName, Subscribe.SubscriptionName, AccessRights.Listen),
     ServiceBusAccount("Topic1Listen")] BrokeredMessage input,
    [ServiceBus(Publish.TopicName, AccessRights.Send),
     ServiceBusAccount("Topic2Send")] out BrokeredMessage output)
    {
        ...
    }
Run Code Online (Sandbox Code Playgroud)

Topic1Listen并且Topic2Send是app.config中连接的名称,但在配置文件中,您需要为connectionstring的名称添加前缀AzureWebJobs

因此,在您的配置文件中,您将需要两个看起来像这样的连接字符串:

<connectionStrings>
    ...
    <add name="AzureWebJobsTopic1Listen" connectionString="..." />
    <add name="AzureWebJobsTopic2Send" connectionString="..." />
</connectionStrings>
Run Code Online (Sandbox Code Playgroud)