2016-09-14 35 views
3

我有一个WebJob,它从事件主题读取消息,处理它们,然后在不同的主题上创建消息。ServiceBusTrigger WebJob的不同服务总线连接字符串WebJob

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

public void EventSubscriptionToNotificationTopic(
     [ServiceBusTrigger(Subscribe.TopicName, Subscribe.SubscriptionName)] BrokeredMessage input, 
     [ServiceBus(Publish.TopicName)] out BrokeredMessage output) 

要做到这一点,我们必须使用含有允许在其访问这两个议题(根)级别发送和收听权限的共享访问密钥的服务总线连接字符串。

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

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

如果不是,我不得不推出我自己的,也许只是使用服务总线触发器和WebJob连接字符串来读取消息,然后使用TopicClient在发布主题上创建一条新消息?

回答

6

有一个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) 
    { 
     ... 
    } 

Topic1ListenTopic2Send是连接的名称在你的app.config中,但在配置文件中,你需要在连接的名称前加上前缀与AzureWebJobs

nstring所以在你的配置文件,将需要两个的ConnectionStrings看起来像:

<connectionStrings> 
    ... 
    <add name="AzureWebJobsTopic1Listen" connectionString="..." /> 
    <add name="AzureWebJobsTopic2Send" connectionString="..." /> 
</connectionStrings>