首页 > 其他分享 >07_NET中Ocelot结合Consult使用

07_NET中Ocelot结合Consult使用

时间:2024-04-16 12:45:44浏览次数:99  
标签:builder http 07 Consul Ocelot Consult new public localhost

Consul主机:http://localhost:8500

新建子服务:Consul.ServiceA【http://localhost:5011】,Consul.ServiceB【http://localhost:5012】

配置内容(06_NET中使用Consul(服务发现) - 野码 - 博客园 (cnblogs.com))

Consul.ServiceA:

[Route("[controller]/[action]")]
    [ApiController]
    public class ProductController : ControllerBase
    {
        [HttpGet]
        public IActionResult GetProduct()
        {
            List<ProductInfo> list = new()
        {
            new() {Id = 1, Name = "商品1"},
            new() {Id = 2, Name = "商品2"}
        };
            return Ok(list);
        }
    }

 

Consul.ServiceB:

[Route("[controller]/[action]")]
    [ApiController]
    public class ProductController : ControllerBase
    {
        [HttpGet]
        public IActionResult GetProduct()
        {
            List<ProductInfo> list = new()
        {
            new() {Id = 1, Name = "商品3"},
            new() {Id = 2, Name = "商品4"}
        };
            return Ok(list);
        }
    }

 

Ocelot配置

新建一个项目OcelotSerivce

安装包:Consul.AspNetCore;Ocelot.Provider.Consul

appsettings.json配置

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "AllowedHosts": "*",
  "Consul": {
    "HostAddress": "http://localhost:8500",//Consul服务地址
    "ServiceAddress": "localhost",//网关地址
    "Port": 7162,//网关端口
    "ServerName": "OcelotSerivce"//该网关在Consul服务的名称
  }
}
 public class ConsulOption
    {
        public string HostAddress { get; set; }
        public string ServiceAddress { get; set; }
        public int Port { get; set; }
        public string ServerName { get; set; }
    }

注册Consul

public static class ConsulServiceExtension
    {
        public static IServiceCollection AddConsulService(this IServiceCollection services, IConfiguration configuration)
        {
            //获取配置文件信息
            var consulSection = configuration.GetSection("Consul");
            services.Configure<ConsulOption>(consulSection);
            var consulOption = consulSection.Get<ConsulOption>();

            //添加consul地址
            services.AddConsul(p =>
            {
                p.Address = new Uri(consulOption.HostAddress);
            });

            //注册consul
            services.AddConsulServiceRegistration(p =>
            {
                p.ID = Guid.NewGuid().ToString();
                p.Name = consulOption.ServerName;
                p.Address = consulOption.ServiceAddress;
                p.Port = consulOption.Port;

                // 健康检查这边没法做,不需要
            });

            return services;
        }
    }

 

添加ocelot.json配置文件

{
  "Routes": [
    {
      "UpstreamPathTemplate": "/s/{url}",
      "UpstreamHttpMethod": [ "Get", "Post" ],
      "DownstreamPathTemplate": "/{url}",
      "DownstreamScheme": "http",
      "ServiceName": "Consul.Service", // 子服务在consul内的名称
      "LoadBalancerOptions": {
        "Type": "RoundRobin"        //轮训
      }
    }
  ],
  "GlobalConfiguration": {
    "BaseUrl": "https://localhost:7162",//网关地址
    "ServiceDiscoveryProvider": {
      "Scheme": "http",
      "Host": "localhost", // consul 主机
      "Port": 8500, //consul 端口
      "Type": "Consul"
    }
  }
}

 

Program.cs设置

            var builder = WebApplication.CreateBuilder(args);
            // 添加配置文件,optional:文件是否可选,reloadOnChange:如果文件发生更改,是否应重载配置。
            builder.Configuration.AddJsonFile("ocelot.json", optional: false, reloadOnChange: true);
            // 添加Ocelot 服务
            builder.Services.AddOcelot(builder.Configuration).AddConsul();
            builder.Services.AddConsulService(builder.Configuration);

            var app = builder.Build();

            app.UseOcelot().Wait();

            app.Run();

 

启动Consul主机,运行Consul.ServiceA,Consul.ServiceB和OcelotSerivce

http://localhost:7162/s/Product/GetProduct

 

标签:builder,http,07,Consul,Ocelot,Consult,new,public,localhost
From: https://www.cnblogs.com/MingQiu/p/18137772

相关文章

  • [POI2007] ATR-Tourist Attractions
    [POI2007]ATR-TouristAttractions题目背景EnglishEdition题目描述给出一张有\(n\)个点\(m\)条边的无向图,每条边有边权。你需要找一条从\(1\)到\(n\)的最短路径,并且这条路径在满足给出的\(g\)个限制的情况下可以在所有编号从\(2\)到\(k+1\)的点上停留过。每......
  • httprunner 4.x学习 - 07环境变量.env
    前言在实际开发迭代过程中,一般都会经历以下几种环境:1.开发环境2.测试环境3.生产环境在不同环境中,通过 .env 文件来设置不同环境运行不同的数据库,如数据库、redis等这些。环境变量在自动化测试中,有时需要借助环境变量实现某些特定的目的,常见的场景包括:1.......
  • POI2007ATR-Tourist Attractions
    最短路#状压dp#滚动优化#POI#Year2007从前\(k\)个跑\(dijksta\),对这\(k\)个点到达的状态状压会MLE,考虑每次转移都只会增加一个状压下的\(1\),按照\(popcount\)分组做滚动//Author:xiaruizeconstintINF=0x3f3f3f3f;constintMOD=1000000007;constin......
  • POI2007TET-Tetris Attack
    POI#Year2007#贪心#树状数组考虑每一对数的最小代价为,将当前的换到最近的下面用树状数组记录中间有几个没有被消掉的//Author:xiaruizeconstintN=2e5+10;intn,m;intla[N];structBIT{ inttr[N]; voidadd(intx,intv) { while(x<=m) { t......
  • POI2007POW-The Flood
    POI#Year2007#并查集#贪心按高度从小到大按顺序考虑每个点,将同样高度的点按顺序全部合并完,然后再遍历这些同样大小的点,如果一个点为关键点且它的联通块中没有抽水机,那么这个位置联通块的最低位置放一个抽水机可以证明这个贪心是最优的//Author:xiaruizeconstintN=1e3......
  • POI2007ODW-Weights
    进制#背包dp#贪心注意到呈倍数的性质,考虑按照倍数转换进制,贪心的选择小的按顺序选择//Author:xiaruizeconstintINF=0x3f3f3f3f3f3f3f3f;constintMOD=1000000007;constintN=2e5+10;intn,m;inta[N],b[N];piis[N];intcnt[N];vector<int>vec;int......
  • 07、VXLAN网关划分
    VXLAN网关划分和VLAN类似,不同VNI之间的VXLAN,及VXLAN和非VXLAN之间不能直接相互通信。为了使VXLAN之间,以及VXLAN和非VXLAN之间能够进行通信,VXLAN引入了VXLAN网关。VXLAN网关分为:二层网关:用于解决租户接入VXLAN虚拟网络的问题,也可用于同一VXLAN虚拟网络的子网通信。三层网......
  • 07、Monitor Link基本原理
    MonitorLink基本原理 图1 MonitorLink组网图示例配置MonitorLink组后,上行接口将被实时监控,一旦所有上行接口出现故障,包括链路故障、OAM的单通故障、OAM的连接无法建立等,其所在组的所有Up的下行接口都会被强制设为ERROR-DOWN状态。当上行链路恢复正常时,恢复下行接口。......
  • 07、管理VRRP
    管理VRRP为了提高网络可靠性,通常部署主备双归属。为了满足不同的业务需要,设备之间可以运行多个VRRP备份组。此时每个VRRP备份组都需要维护自己的状态机,这样设备之间就会存在大量的VRRP协议报文。如图1所示,为了减少协议报文对带宽的占用及CPU资源的消耗,可以将其中一个VRRP备份......
  • 07、M-LAG故障场景流量转发
    M-LAG故障场景流量转发M-LAG作为一种跨设备链路聚合的技术,把链路可靠性从单板级提高到了设备级。如果出现故障(不管是链路故障、设备故障还是peer-link故障),M-LAG都能够保证正常的业务不受影响,下面介绍M-LAG在故障情况下是如何保障业务的正常运行的。上行链路故障图1 上行链......