2016-05-16 56 views
1

我目前正在Azure中使用不同的Web API服务开发基于SOA的体系结构(它们可能有资格作为微服务,但我很犹豫使用该术语)。Azure Web API - 如何在服务之间进行通信

我有一个由Azure Scheduler触发的服务。它做了一些“事情”,然后需要调用另一个Web API(通过HttpClient)来触发其他事情。为此,我需要知道第二个服务的URI。当本地运行,这是好的,因为它是一样的东西

POST http://localhost:1234/2ndService/api/action

然而,当我部署到Azure中(使用仅供内部访问级别),它得到一个模糊的URI,如http://microsoft-apiapp8cf3d453-39d8-4b3b-ad00-e9d8008a9b58,在部署时我显然无法猜测。

关于如何解决这个问题的任何想法?或者我在这里犯了一个基本错误?

回答

0

对于Azure Web应用程序,您可能会始终看到此类属性将转到Web应用程序仪表板,然后是属性。从Visual Studio部署时,您可以根据需要设置URL - 只需检查它即可,并且工作正常。

1

您是否考虑通过queues in Azure Table Services传递消息,而不是依赖公共http端点?这非常简单,并且将会更加强大,因为您可以利用内置功能(如保证消息传递)。

总的想法是,服务A做一些“东西”,然后将消息放在队列ONE上。服务B不断从第一队列中读取信息,直到它从服务A(或任何其他服务)接收到新消息,然后执行其“STUFF”。您可以继续将此类调用连接到需要通知的其他服务。

如果你想要一个更优雅的解决方案,你可以看看使用Service Bus Topics但这个概念基本上是相同的。

此外,由于您提到您的架构非常类似于微服务,因此您可以查看专为您的方案设计的新Service Fabric

0

不太清楚你使用的是什么技术 - 它是IaaS VM吗?它是Web应用程序吗?

从我的观点来看,每个服务都应该作为单独的Web应用程序(或API应用程序,如果需要)进行部署。每个Web App都定义了自己的名称,如yourwebapp.azurewebsites.net,因此,一旦您在Azure中设置了Web App 1,就知道它的地址,因此您将从Web App No 2调用它。

In所有的情况下,你应该有完全合格的域名,而不是本地/内部的。

+0

我们将使用API​​应用程序。我似乎有这个问题,我希望他们都是“内部”隐私(即只能访问同一地区内的其他API应用程序)。这似乎使名称不可确定(即,而不是yourapp.azurewebsites.net,它变成http:// microsoft-apiapp8cf3d453-39d8-4b3b-ad00-e9d8008a9b58 /) – Jamie

+0

如果你想控制访问,你将要么认证你的API(最好),或/你可以在[应用程序服务环境](https://azure.microsoft.com/en-us/documentation/articles/app-service-app-service-environment)中部署API应用程序-intro /),那么您将能够控制VNET /子网级别的安全性。 – LeCampusAzure

相关问题