当前位置:网站首页>Nacos+AspnetCore+Ocelot实战编码

Nacos+AspnetCore+Ocelot实战编码

2022-04-23 13:59:00 流苏1990

纪录下最近玩的这个方案。

1、AspnetCore(框架NetCore3.1)服务部署2个docker,作为负载均衡的2个节点,通过Nacos自行分配

2、网关Ocelot(框架Net5.0,因Ocelot.Provider.Nacos对接Nacos2.0,低版本访问2.0的Nacos会报错)做转发,配置采用Nacos负载均衡

以下列出部分代码以及配置

A、创建微服务,主要代码如下:

1、注册Nacos(引用Nuget:nacos-sdk-csharp-unofficial.aspnetcore)

public void ConfigureServices(IServiceCollection services)
{
    services.AddNacosAspNetCore(Configuration);
}

2、appsetting.json配置Nacos如下:

 "nacos": {
    "ServerAddresses": [ "" ],//服务器地址
    "DefaultTimeOut": 15,
    "Namespace": "",//Nacos的命名空间
    "ListenInterval": 1000,
    "ServiceName": "",//服务名
    "Weight": 100
  }

3、注册成功后,可以在Nacos 页面找到,如下图:

 有个需要注意的地方是 配置docker 启动的时候需要指定IP地址跟Port端口(不然Nacos自动配置了docker容器的内部IP地址,会导致转发后访问不了),所以在配置docker 容器Run 的时候 需要增加ASPNETCORE_URLS参数,具体如下:

docker run --name=umsspc1 --restart=always -d -p 85:9002 -e "ASPNETCORE_URLS=http://xxxxx:85" --link umsreports:nameasreporttest -v /usr/pm/umsspccollect/plug:/spccore/plug -v /usr/pm/umsspccollect/jsonConfig:/spccore/jsonConfig umsspcapi

B 、Ocelot网关项目(Net5.0框架),主要代码以及配置如下:

1、引用的Nuget有如下:

nacos-sdk-csharp.Extensions.Configuration

Ocelot.Provider.Nacos

Ocelot.Provider.Polly

2、配置文件appsettings.json如下:

"GlobalConfiguration": {
    "ServiceDiscoveryProvider": {
      "Type": "Nacos"//这句话是重要的
    }
  },
  "nacos": {
    "Listeners": [
      {
        "Optional": false,
        "DataId": "spcreceive-ocelot.json",//配置中心的DataId,配置信息写的是路由跳转
        "Group": "DEFAULT_GROUP"
      }
    ],
    "ServerAddresses": [ "http://xxxxx:8848" ],//nacos地址
    "ServiceName": "apigateway",//服务名
    "DefaultTimeOut": 5000,    
    "Namespace": "",//自定义Namespace的Id
    "GroupName": "DEFAULT_GROUP",
    "ClusterName": "DEFAULT",
    "ListenInterval": 1000,
    "RegisterEnabled": true,
    "InstanceEnabled": true,
    "LBStrategy": "WeightRoundRobin", //WeightRoundRobin WeightRandom 
    "NamingUseRpc": true
  }

3、主要代码:

public void ConfigureServices(IServiceCollection services)
{
    //注册服务发现
    services.AddOcelot().AddNacosDiscovery();
}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    app.UseOcelot().Wait();//使用Ocelot服务
}

Program.cs文件

public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
            .ConfigureAppConfiguration((hostingContext, builder) =>
            {
                var c = builder.Build();
                builder.AddNacosV2Configuration(c.GetSection("nacos"));
            })
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
            });

4、Nacos的配置中心配置项spcreceive-ocelot.json 如下:

{
  "Routes": [  
    {
      "DownstreamPathTemplate": "/api/xxxxxbe",
      "DownstreamScheme": "http",
      "UpstreamPathTemplate": "/spc/Cxxxxxxiable",
      "UpstreamHttpMethod": [ "Get", "Post" ],
      "ServiceName": "SPCService",
      "LoadBalancerOptions": {
        "Type": "RoundRobin"
      },     
      // 使用服务发现
      "UseServiceDiscovery": true      
    }
  ]
}

版权声明
本文为[流苏1990]所创,转载请带上原文链接,感谢
https://blog.csdn.net/fuweiping/article/details/120378986