微服务:如何在 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 配置微服务站点绑定
我已经创建了两个项目,其中一个是 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 配置微服务站点绑定