您的位置:首页 > 文旅 > 美景 > 龙岩网站建设要多少费用_汽车网站页面_谷歌浏览器最新版本_推广软文平台

龙岩网站建设要多少费用_汽车网站页面_谷歌浏览器最新版本_推广软文平台

2025/1/8 14:27:09 来源:https://blog.csdn.net/szy13323042191/article/details/144892464  浏览:    关键词:龙岩网站建设要多少费用_汽车网站页面_谷歌浏览器最新版本_推广软文平台
龙岩网站建设要多少费用_汽车网站页面_谷歌浏览器最新版本_推广软文平台

.NET 8 + Ocelot + Consul 实现代理网关、服务发现

本文环境:.NET 8 + Ocelot 23.4.2 + Consul 1.7.14.6

1 实现网关

  1. 分别创建3个WebApi工程:OcelotGwTestGwAServiceTestGwBService
  2. OcelotGw工程中安装Ocelot包:Install-Package Ocelot
  3. 添加JSON配置文件或直接在appsettings.json文件中添加配置;
    1. 配置内容:
    {"Routes": [{"DownstreamPathTemplate": "/api/{url}","DownstreamScheme": "https","DownstreamHostAndPorts": [{"Host": "localhost","Port": 5001}],"UpstreamPathTemplate": "/A/{url}","UpstreamHttpMethod": [ "Get" ]},{"DownstreamPathTemplate": "/api/{url}","DownstreamScheme": "https","DownstreamHostAndPorts": [{"Host": "localhost","Port": 5002}],"UpstreamPathTemplate": "/B/{url}","UpstreamHttpMethod": [ "Get" ]},{"DownstreamPathTemplate": "/todos/{id}","DownstreamScheme": "https","DownstreamHostAndPorts": [{"Host": "jsonplaceholder.typicode.com","Port": 443}],"UpstreamPathTemplate": "/todos/{id}","UpstreamHttpMethod": [ "Get" ]}],"GlobalConfiguration": {"BaseUrl": "https://localhost:5000/"}
    }
    
  4. 在测试服务中分别添加HelloController
    [Route("api/[controller]")]
    [ApiController]
    public class HelloController : ControllerBase
    {[HttpGet]public IActionResult Get(){return Ok("Hello from Service A!");}
    }
    
  5. 同时启动三个工程,并访问https://localhost:5000/B/Hellohttps://localhost:5000/B/Hello测试。

2 服务发现

下面使用服务发现完成ServiceA的配置;

  1. 下载Consul:Install Consul
  2. 运行Consul,启动命令:consul.exe agent -dev
  3. 修改ServiceAOcelot配置:
    {"UseServiceDiscovery": true,"DownstreamPathTemplate": "/api/{url}","DownstreamScheme": "http","ServiceName": "ServiceA","UpstreamPathTemplate": "/A/{url}","UpstreamHttpMethod": [ "Get" ]
    }
    
  4. ServiceA中添加健康监测接口:
    using Microsoft.AspNetCore.Mvc;
    namespace Hearth.TestGwAService.Controllers
    {[Route("[controller]/[action]")][ApiController]public class HealthController : ControllerBase{[HttpGet("/healthCheck")]public IActionResult Check() => Ok("ok");}
    }
    
  5. ServiceAProgram中进行代理服务注册:
    var consulClient = new ConsulClient(x =>
    {// consul 服务地址x.Address = new Uri("http://localhost:8500");
    });
    var registration = new AgentServiceRegistration()
    {ID = Guid.NewGuid().ToString(),Name = "ServiceA",// 服务名Address = "localhost", // 服务绑定IPPort = 5001, // 服务绑定端口Check = new AgentServiceCheck(){DeregisterCriticalServiceAfter = TimeSpan.FromSeconds(5),//服务启动多久后注册Interval = TimeSpan.FromSeconds(10),//健康检查时间间隔HTTP = "http://localhost:5001/healthCheck",//健康检查地址Timeout = TimeSpan.FromSeconds(5)}
    };
    // 服务注册
    consulClient.Agent.ServiceRegister(registration).Wait();
    var app = builder.Build();
    // 应用程序终止时,服务取消注册
    app.Lifetime.ApplicationStopping.Register(() =>
    {consulClient.Agent.ServiceDeregister(registration.ID).Wait();
    });
    

3 一些问题

  1. Ocelot配置文件中,旧版本可能用的是ReRoutes,新版本中应该是Routes
  2. 注意DownstreamScheme,如果使用ssl应为https
  3. 在开发环境使用Consul服务发现时,需要注意是否使用SSL验证,无效的证书会导致502 Bad Gateway;
  4. 官方文档:ocelot.readthedocs.io

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com