WebJob ServiceBus 主题权限
WebJob ServiceBus Topic permissions
我参与了一个多层项目,其中一部分正在使用来自第三方系统的 "events" 流。供应商通过 Azure 服务总线主题发布这些——他们提供、控制和管理总线。我们只需提供 URI、主题名称和订阅详细信息。
我们的方法是将 Webjob 组合在一起,使用 SDK 中提供的 ServiceBusTrigger
来处理新消息的侦听并触发将它们处理到我们的系统中。然而,我们似乎遇到了障碍,因为作业不断地无法从主题中读取。作业失败并显示模糊的 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 个其他工作)——尤其是失去像异步和并发处理来自主题的消息这样的功能
SDK 进行以下需要管理权限的调用。
Microsoft.Azure.WebJobs.ServiceBus.Listeners.NamespaceManagerExtensions。
如果您无法设置这些权限,一种替代方法是不将 SDK 用于服务总线触发器,而是将其用于其他所有内容。
为了解决这个问题,我们对 WebJobs SDK 进行了建议的更改(此处的拉取请求:https://github.com/Azure/azure-webjobs-sdk/pull/528)。这将在下一个版本中。以下是如何指定每个属性的访问权限的示例:
public static void JobFunction(
[ServiceBusTrigger("inputqueue", AccessRights.Listen)] string message,
[ServiceBus("outputqueue", AccessRights.Send)] out string message)
{
. . .
}
未指定时,默认为"Manage"。当设置为管理以外的任何内容时,SDK 将不会尝试创建任何 SB 资源。我认为这可以满足您的需求?
我参与了一个多层项目,其中一部分正在使用来自第三方系统的 "events" 流。供应商通过 Azure 服务总线主题发布这些——他们提供、控制和管理总线。我们只需提供 URI、主题名称和订阅详细信息。
我们的方法是将 Webjob 组合在一起,使用 SDK 中提供的 ServiceBusTrigger
来处理新消息的侦听并触发将它们处理到我们的系统中。然而,我们似乎遇到了障碍,因为作业不断地无法从主题中读取。作业失败并显示模糊的 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 个其他工作)——尤其是失去像异步和并发处理来自主题的消息这样的功能
SDK 进行以下需要管理权限的调用。 Microsoft.Azure.WebJobs.ServiceBus.Listeners.NamespaceManagerExtensions。 如果您无法设置这些权限,一种替代方法是不将 SDK 用于服务总线触发器,而是将其用于其他所有内容。
为了解决这个问题,我们对 WebJobs SDK 进行了建议的更改(此处的拉取请求:https://github.com/Azure/azure-webjobs-sdk/pull/528)。这将在下一个版本中。以下是如何指定每个属性的访问权限的示例:
public static void JobFunction(
[ServiceBusTrigger("inputqueue", AccessRights.Listen)] string message,
[ServiceBus("outputqueue", AccessRights.Send)] out string message)
{
. . .
}
未指定时,默认为"Manage"。当设置为管理以外的任何内容时,SDK 将不会尝试创建任何 SB 资源。我认为这可以满足您的需求?