WebJob ServiceBus主题权限(WebJob ServiceBus Topic perm

2019-10-22 01:31发布

我参与了多层次的项目,这是消费从第三方系统“事件”流的一个组成部分。 供应商是通过Azure的服务总线主题发布这些 - 它们提供,控制和管理总线。 我们只是提供的URI,TopicName及认购细节。

我们的方法是把一个Webjob,使用所提供的ServiceBusTrigger在SDK处理监听新消息和触发它们加工成我们的系统。 然而,我们似乎在那么多的纷纷创出路障作为作业不断失败,从主题阅读。 该作业失败,一个模糊的Timeout Exception

Unhandled Exception: System.TimeoutException: The timeout elapsed upon attempting to obtain a token while accessing 'https://****-sb.accesscontrol.windows.net/WRAPv0.9/'. 
---> System.IdentityModel.Tokens.SecurityTokenException: The token provider was unable to provide a security token while accessing 'https://****-sb.accesscontrol.windows.net/WRAPv0.9/'. 
Token provider returned message: 'The operation has timed out'.

但进一步下跌,跟踪包括:

[ERR] at Microsoft.ServiceBus.Common.AsyncResult.End[TAsyncResult](IAsyncResult result)
[ERR] at Microsoft.ServiceBus.NamespaceManager.OnEndTopicExists(IAsyncResult result)
[ERR] at Microsoft.ServiceBus.NamespaceManager.EndTopicExists(IAsyncResult result)

供应商后来证实,只允许/要求认购对主题是Listen

任何人都可以确认哪些权限要求的ServiceBusTrigger

而作为一个+1,就假设它,无论出于何种原因,需要更多的Listen (即需求Manage ),会有人想提出一种替代的方法呢? 这似乎是一个耻辱,失去WebJob基础设施建设(该项目已经有其他3个项目) - 从主题特别是像消息的异步和并行处理功能丧失

Answer 1:

要关闭此,我们所做的建议更改为WebJobs SDK(pull请求在这里: https://github.com/Azure/azure-webjobs-sdk/pull/528 )。 这将是在下一版本中。 下面是如何指定每个属性的AccessRights一个例子:

public static void JobFunction(
    [ServiceBusTrigger("inputqueue", AccessRights.Listen)] string message,
    [ServiceBus("outputqueue", AccessRights.Send)] out string message)
{
    . . .
}

如果没有指定,默认将是“管理”。 当设置为比管理其他任何东西,SDK将不会试图创建任何SB资源。 我认为这符合您的需求?



Answer 2:

该SDK使得下面的调用这需要管理权限。 Microsoft.Azure.WebJobs.ServiceBus.Listeners.NamespaceManagerExtensions。 如果你不能设置这些权限一种替代方法是不使用SDK的服务总线触发,但使用它的一切。



文章来源: WebJob ServiceBus Topic permissions