2015-02-23 23 views
1

我参与了一个多层项目,其中一部分消耗了来自第三方系统的“事件”流。供应商通过Azure服务总线主题发布这些主题 - 它们提供,控制&管理总线。我们仅提供URI,TopicName和Subscription细节。WebJob ServiceBus主题权限

我们的方法是在SDK中使用提供的ServiceBusTrigger将Webjob放在一起,以处理侦听处理它们到我们系统中的新消息&。然而,我们似乎遇到了障碍,因为工作不断从主题中读取。该作业失败,一个模糊的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个其他工作)似乎是一种耻辱 - 尤其是像异步&并发处理来自主题

回答

5

要关闭此功能,我们对WebJobs SDK(请求请求: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资源。我认为这符合你的需求?

+0

感谢马修。我们已经围绕目前的主题实现了自己的包装,但它远非完美,因为我们显然没有仪表板集成,并且有些问题标志着正常关机。 一旦上述修复发布在稳定版本中,我们一定会在不久的将来重新审视这个问题。 – Ian 2015-06-13 06:40:44

1

的异步功能的丢失SDK会进行以下调用,这将需要管理权限。 Microsoft.Azure.WebJobs.ServiceBus.Listeners.NamespaceManagerExtensions。 如果您不能设置这些权限,一种替代方法是不要将SDK用于服务总线触发器,而是将其用于其他任何事情。

+0

感谢您的确认Pranav - 我会使用'MessageClient.OnMessageAsync()'回调把一些东西放在一起 我想说,有一个相当引人注目的业务用例来支持供应商 - 客户端场景卖方只提供监听给定的主题(或队列)。我猜想一个选择是向触发器属性('MessageBusTriggerConnectionType.Managed' /'.Listener')添加Enum标志 - 默认为Managed以保持当前行为,但如果设置为Listener,则跳过任何主题描述/ CreateIfNotExists调用 – Ian 2015-02-24 07:18:25

+0

谢谢你的建议。我会把它带回队中。 – 2015-02-24 16:48:41