Azure 服务总线中继 - 从本地获取数据

Posted

技术标签:

【中文标题】Azure 服务总线中继 - 从本地获取数据【英文标题】:Azure service bus relay - get data from on premise 【发布时间】:2013-01-08 14:42:01 【问题描述】:

Azure 中是否可能出现以下场景?

我需要从客户场所获取数据到 Windows azure,对其进行处理并将其保存在数据库或表存储中。客户场所位于防火墙/nat .. 等之后。构建单一解决方案(将为所有客户运行)并允许我获取特定客户的数据的最佳方式是什么。

基本上worker角色会从客户1获取数据,处理并保存;而不是来自客户 2 等等。

我想使用服务总线中继,但是否可以构建一个自定义 wcf 服务,该服务将为许多用户运行,暴露在同一端点并允许工作角色向该端点请求数据,但针对特定客户?

【问题讨论】:

【参考方案1】:

David,Service Bus Relay 是解决此问题的理想解决方案。您可以编写一个 WCF 服务,该服务将在每个客户前提下运行并连接到您在云中的单一服务。使用服务总线中继可以为您带来很多优势: 1) 对于客户端服务,您不需要在其 NAT/防火墙中打开任何入站端口,因为服务总线客户端将建立出站连接。 2) 您可以在云中运行您的服务的单个或多个实例,并在服务总线上监听单个或多个地址/端点。这样,您既可以跨服务扩展,也可以根据您的需要隔离每个客户。 3) 我们支持负载平衡,您可以让多个发件人(来自客户位置)连接到单个端点地址,在这里再次为您提供基于云的侦听器服务,您可以将多个实例连接到同一个端点 4) 提供广泛的 WCF 绑定支持,因此您可以根据需要选择合适的渠道

以下是入门的其他资源: 概述:http://www.windowsazure.com/en-us/develop/net/how-to-guides/service-bus-relay/ 示例:http://code.msdn.microsoft.com/windowsazure/Relayed-Messaging-Load-bd76a9f8

【讨论】:

但是我有一个问题。在您提到的示例中,我该怎么做才能不在客户端使用 issuername: OWNER 和它的密钥?我的意思是出于安全原因,是否可以创建一个名为“MYCUSTOMER”的自定义发行人名称,并且它是自己的密钥,并且此自定义发行人名称不会像所有者那样拥有完全控制权..?你知道我的意思吗? 我知道这个问题已有 2 年历史,但我目前正在开发一个非常相似的解决方案。关于为服务总线身份验证创建其他身份,请查看 Azure 团队的 SBAzTool,它是一个命令行界面和 DLL,允许您生成服务总线身份和权限(即侦听、发送、接收)和密钥以编程方式。 Azure SBaZ Tool 把这个放在这里,以防其他人像我一样遇到这个问题! 使用 Service Bus 中继很好,但为此,您需要在本地部署 web 服务的 wcf 包装器,或者您需要进行一些配置更改。是否可以从 azure web api 调用本地 web 服务而不更改本地 web 服务上的任何内容。【参考方案2】:

我有点困惑 - 如果您需要从客户那里获取数据,他们不能简单地调用您的服务吗?通常防火墙会允许出站请求?

如果您想以异步或半主动方式向客户发送数据,那么服务总线中继会非常方便

【讨论】:

以上是关于Azure 服务总线中继 - 从本地获取数据的主要内容,如果未能解决你的问题,请参考以下文章

Azure 服务总线中继偶发性故障异常

函数应用无法从 Azure 服务总线获取消息

Azure 函数 - 从 Azure 密钥保管库获取服务总线连接字符串

在本地测试 Azure 服务总线,无需任何订阅或登录

Azure 服务总线触发队列在本地调试中未命中代码

Azure 服务总线 - 留言