我用C#创建了几个在Windows中的docker上运行的微服务,我需要从另一个微服务中调用微服务,所以我使用了这种方式来调用:
[HttpGet("GetOrder/{Object_ID}")]
public Order GetOrder (int id)
{
string Baseurl = "http://189.29.0.100/";
…..
using (var client = new HttpClient())
{
//Passing service base url
client.BaseAddress = new Uri(Baseurl);
client.DefaultRequestHeaders.Clear();
//Define request data format
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
//Sending request to find web api REST service resource GetAllEmployees using HttpClient
borrowerData = await client.GetStringAsync("api/order/" + Id.ToString());
}
…
}
我在组合文件中使用了修复IP,如下所示:
orderservice:
environment:
- ASPNETCORE_ENVIRONMENT=Development
ports:
- "80"
networks:
default:
ipv4_address: 189.29.0.100
问题是当我们在VM中部署这个项目时,如何让它与这些Ips一起工作?
最佳答案
Docker compose 在您的主机上创建一个虚拟网络,并且无法使用这些 IP 从 Docker 外部路由服务。但在虚拟网络内部,所有服务都可以通过其名称相互访问 (http://otherservice/
)。
如果您想访问虚拟机上所有已部署的微服务,您的 docker compose 中将需要一个反向代理。例如,将请求分派(dispatch)给其他服务的 nginx 服务。
关于c# - 从 Docker 中的另一个微服务调用微服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46370014/