上一篇 consul在centos7下实现集群 讲到consul的安装和集群,本次来说一下asp.net core使用consul注册服务
1. 准备
安装了consul的centos7系统
三个asp.net core api项目,其中一个网关项目,两个服务,一般微服务都会使用网关,所以这里也加上网关
项目将发布在本机IIS上(ip:192.168.1.155),consul在虚拟机(系统centos7,ip:192.168.253.128)
2. 代码
服务A:添加HealthController,健康检查用,然后发布到IIS,使用端口9001
[Produces("application/json")] [Route("api/[controller]")] [ApiController] public class HealthController : ControllerBase { [HttpGet] public IActionResult Get() => Ok("ok"); }
服务B:与服务A一样,添加HealthController,内容一样,然后发布到IIS,使用端口9002
网关项目:nuget引用ocelot包,然后在项目根目录下添加ocelot.json文件
{ "ReRoutes": [ { "UpstreamPathTemplate": "/a/{url}", "UpstreamHttpMethod": [ "Get", "Post" ], "DownstreamPathTemplate": "/api/{url}", "DownstreamScheme": "http", "DownstreamHostAndPorts": [ { "Host": "localhost", "Port": 9001 } ] }, { "UpstreamPathTemplate": "/b/{url}", "UpstreamHttpMethod": [ "Get", "Post" ], "DownstreamPathTemplate": "/api/{url}", "DownstreamScheme": "http", "DownstreamHostAndPorts": [ { "Host": "localhost", "Port": 9002 } ] } ], "GlobalConfiguration": { } }
然后在Startup的ConfigureServices方法中添加如下代码:
services.AddOcelot(new ConfigurationBuilder().AddJsonFile("ocelot.json", false, true).Build());
在Configure方法app.UseMvc()之前添加如下代码
app.UseOcelot().Wait();
发布网关项目到IIS,使用9000端口
通过locaohost:9000/a/health即可访问localhost:9001/api/health
通过locaohost:9000/b/health即可访问localhost:9002/api/health
3. consul服务注册(配置文件方式)
在 /etc/consul目录下创建consul_config.json
{ "services":[ { "id": "CLIENT_SERVICE_01", "name" : "ApiServiceA", "tags": [ "ApiService_01" ], "address": "192.168.1.155", "port": 9001, "checks": [ { "name": "clientservice_check", "http": "http://192.168.1.155:9001/api/health", "interval": "10s", "timeout": "5s" } ] }, { "id": "CLIENT_SERVICE_02", "name" : "ApiServiceB", "tags": [ "ApiService_02" ], "address": "192.168.1.155", "port": 9002, "checks": [ { "name": "clientservice_check", "http": "http://192.168.1.155:9002/api/health", "interval": "10s", "timeout": "5s" } ] }] }
然后执行
consul agent -server -ui -bootstrap-expect=1 -config-dir=/etc/consul -data-dir=/var/local/consul -node=consul-128 -client=0.0.0.0 -bind=192.168.253.128 -datacenter=dc1
在浏览器中打开192.168.253.128:8500,可以看到服务A和服务B已经注册并能正常访问