c# - 从 Docker 中的另一个微服务调用微服务

标签 c# docker microservices docker-for-windows

我用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/

相关文章:

java - 从单个服务多次调用多个微服务的最佳方法或设计模式是什么?

c# - 接受输入/返回的文本框

c# - 将 XmlNodeList 转换为 XmlNode[]

c# - 在运行时更改用户及其在 WPF/Prism 桌面应用程序中的权限的常用方法

mysql - Docker 无法使用 mysql 链接到未运行的容器

c# - MassTransit 在 RabbitMQ 关闭时尝试无限连接

c# - 数字之间带有符号的正则表达式

docker - 如何在 kubernete 的 pod yaml 文件中指定主机端口范围而不是主机端口?

docker - 使用 docker 的 Elastic Enterprise Search 7.9.0

java.net.ConnectException : Connection refused between two microservices via docker