微服务:如何在 windows 服务器上使用 API 网关部署微服务项目

Microservice : How can you deploy your Microservices project using an API gateway on windows server

我已经创建了两个项目,其中一个是 API 使用此 JSON 文件的网关:

{
  "Routes": [
    {
      "DownstreamPathTemplate": "/api/post",
      "DownstreamScheme": "https",
      "DownstreamHostAndPorts": [
        {
          "Host": "localhost",
          "Port": 44309
        }
      ],
      "UpstreamPathTemplate": "/gateway/post",
      "UpstreamHttpMethod": [
        "POST",
        "PUT",
        "GET"
      ]
    }
  ]
}

在微服务端,我创建了一个继承了 Controllerbase 的 PostController 的另一个项目,基本上是一个 ApiController:

using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using PostService.Repository;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

        namespace PostService.Controllers
        {
            [Route("api/[controller]")]
            [ApiController]
            public class PostController : ControllerBase
            {
                private readonly IPostRepository _postRepository;

                public PostController(IPostRepository postRepository)
                {
                    _postRepository = postRepository;
                }

                [HttpGet]
                public IActionResult Get()
                {
                    var posts = _postRepository.GetPosts();
                    return new OkObjectResult(posts);
                }

            }
        }

当我 运行 项目打开两个浏览器时,第一个是 ApiGateway,另一个浏览器是本地主机上端口 44309 上的微服务 运行s。我 运行这在 api 网关的地址栏中:

https://localhost:44342/gateway/post

很棒的是我的 PostController 中的 Get 方法被调用并且 returns 数据正确。

但是如果我想 运行 或在 windows 服务器上部署这些项目,这将如何在 windows 服务器上工作。我需要在 ocelot.json 文件中更改什么,还是保持不变,或者 O 是否需要将这些值更改为远程 IP 和端口:

    "DownstreamHostAndPorts": [
        {
          "Host": "localhost",
          "Port": 44309
        }
      ],

有人能给我指明正确的方向,告诉我如何在 windows 服务器上部署它,以便 Web 或移动应用程序可以访问 API 网关吗?

要在 Windows 服务器上部署它,您需要在 IIS 上创建两个网站,一个用于 API 网关,一个用于微服务。 API 网关站点应该监听 https 端口 443 和任何 IP 地址。微服务可以监听你选择的任何端口,但是不需要为 https 配置它,因为网关和微服务之间的通信是在服务器本地进行的。微服务应该只监听 127.0.0.1 和 [::1] IP 地址,因为微服务应该只能通过 API 网关访问。所以你的 ocelot.json 可以是:

{
  "Routes": [
    {
      "DownstreamPathTemplate": "/api/post",
      "DownstreamScheme": "http",
      "DownstreamHostAndPorts": [
        {
          "Host": "localhost",
          "Port": 44309
        }
      ],
      "UpstreamPathTemplate": "/gateway/post",
      "UpstreamHttpMethod": [
        "POST",
        "PUT",
        "GET"
      ]
    }
  ]
}

不要忘记在端口 44309 或您选择的端口上为 http 配置微服务站点绑定