首页 > 其他分享 >Net6.0 集成 支持 Nacos 的 Ocelot 网关

Net6.0 集成 支持 Nacos 的 Ocelot 网关

时间:2023-08-15 18:23:00浏览次数:42  
标签:网关 builder Nacos Ocelot Services using true app

1-创建 Ocelot 网关 webapi

 2-添加引用

https://www.cnblogs.com/wucy/p/13353824.html

Install-Package nacos-sdk-csharp -Version 1.3.5
Install-Package Ocelot.Provider.Nacos -Version 1.3.5
Install-Package Ocelot.Provider.Polly -Version 1.3.5

  3-配置 appsettings.json

{
  "GlobalConfiguration": {
    "ServiceDiscoveryProvider": {
      "Type": "Nacos"  //开启服务发现
    }
  },
  "Nacos": {
    "Listeners": [ //对应配置文件
      {
        "Optional": false,
        "DataId": "common", //配置名称
        "Group": "DEFAULT_GROUP" //组名
      },
      {
        "Optional": false,
        "DataId": "gateway",
        "Group": "DEFAULT_GROUP"
      }
    ],
    "DefaultTimeOut": 15,
    "ListenInterval": 1000,
    "ServiceName": "gatewayApiSrv",
    "Namespace": "public", //对应的是命名空间的Id
    "ServerAddresses": [ "http://ip地址:8848/" ], //是Nacos的服务器地址,可以添加多个
    "UserName": "nacos",
    "Password": "1Q2w3e4r$",
    "RegisterEnabled": true,
    "InstanceEnabled": true,
    "LBStrategy": "WeightRoundRobin",
    "ConfigUseRpc": false, //false-http协议,true-grpc
    "NamingUseRpc": false //false-http协议,true-grpc
  },
  "Urls": "http://*:5100"
}

  4- nacos 配置

 

{
    "Routes":[
        {
            "ServiceName":"userApiSrv",
            "UpstreamPathTemplate":"/api/Account/Login",
            "UpstreamHttpMethod": [ "Get","Post","Put", "Delete" ],
            "LoadBalancerOptions": {
                "Type": "LeastConnection"
            },
            "UseServiceDiscovery": true,
            "DownstreamPathTemplate":"/api/Account/Login",
            "DownstreamScheme":"http",
            "DownstreamHostAndPorts":[
                {
                    "Host": "192.168.108.115",
                    "Port": 5101
                }
            ]
        },
        {
            "ServiceName":"userApiSrv",
            "UpstreamPathTemplate":"/api/Account/Detail/{id}",
            "UpstreamHttpMethod": [ "Get"],
            "LoadBalancerOptions": {
                "Type": "LeastConnection"
            },
            "UseServiceDiscovery": true,
            "DownstreamPathTemplate":"/api/Account/Detail/{id}",
            "DownstreamScheme":"http",
            "DownstreamHostAndPorts":[
                {
                    "Host": "192.168.108.115",
                    "Port": 5101
                }
            ]
        }
    ]
}

  网关参数配置请参考:https://www.cnblogs.com/jesse2013/p/net-core-apigateway-ocelot-docs.html

     5- 配置 program.cs

using Serilog;
using Microsoft.AspNetCore.Mvc;
using System.Text.Encodings.Web;
using System.Text.Unicode;
using MicroSrv.User.HostApi.JSON;
using Kinwong.Logger;
using Kinwong.Swagger.NSwag;
using Nacos.AspNetCore.V2;
using Nacos.V2.DependencyInjection;
using Ocelot.DependencyInjection;
using Ocelot.Provider.Nacos;
using Ocelot.Middleware;

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddNacosAspNet(builder.Configuration, section: "Nacos");
builder.Services.AddOcelot().AddNacosDiscovery(section: "Nacos");
builder.Host.UseNacosConfig("Nacos", logAction: x => x.AddSerilog());
builder.Services.AddOptions();
//builder.Services.AddNacosWeb(builder.Configuration, builder.Configuration, section: "Nacos");
var _myAllowSpecificOrigins = "_myAllowSpecificOrigins";
builder.Host.UseSerilog((context, services, logger) =>
{
    logger.ReadFrom.Configuration(context.Configuration)
          .ReadFrom.Services(services);
    logger.Enrich.FromLogContext();
});
builder.Services.Configure<ApiBehaviorOptions>(options =>
{
    //禁用自定义验证
    options.SuppressModelStateInvalidFilter = true;

    //options.InvalidModelStateResponseFactory = context =>
    //{
    //    var error = context.ModelState.GetValidationSummary();
    //    ////自定义自己想要返回的数据结果,我这里要返回的是Json对象,通过引用Newtonsoft.Json库进行转换
    //    var payload = JsonConvert.SerializeObject(Result.Error(HttpStatusCode.BadRequest.ToCode(), error));
    //    //////自定义返回的数据类型
    //    //context.HttpContext.Response.ContentType = "application/json";
    //    //////自定义返回状态码,默认为401 我这里改成 200
    //    //context.HttpContext.Response.StatusCode = StatusCodes.Status200OK;
    //    //////context.Response.StatusCode = StatusCodes.Status401Unauthorized;
    //    //////输出Json数据结果
    //    //context.HttpContext.Response.WriteAsync(payload);
    //    return new ObjectResult(error);
    //};
});
builder.Services.AddHttpContextAccessor();
builder.Services.AddCors(c =>
{
    //https://learn.microsoft.com/zh-cn/aspnet/core/security/cors?view=aspnetcore-6.0
    var cors = builder.Configuration.GetSection("Cors").Value;
    if (!string.IsNullOrWhiteSpace(cors))
    {
        c.AddPolicy(_myAllowSpecificOrigins, policy =>
        {
            policy.WithOrigins(cors.Split(','))
                .AllowAnyMethod()
                .AllowAnyHeader();
        });
    }
    else
    {
        c.AddPolicy(_myAllowSpecificOrigins, policy =>
        {
            policy.AllowAnyOrigin()
                .AllowAnyMethod()
                .AllowAnyHeader();
        });
    }
});
builder.Services.AddControllers()
    .AddJsonOptions(options =>
    {
        //https://learn.microsoft.com/zh-cn/aspnet/core/web-api/advanced/formatting?view=aspnetcore-6.0
        //配置 小写 格式,而不是默认的 camelCase 格式
        options.JsonSerializerOptions.PropertyNamingPolicy = new LowercasePolicy();
        //中文转义处理
        options.JsonSerializerOptions.Encoder = JavaScriptEncoder.Create(UnicodeRanges.All);
        //忽略大小写
        options.JsonSerializerOptions.PropertyNameCaseInsensitive = true;
    });
builder.Services.AddNSwagger(title: "Gateway系统API接口文档", description: "API接口说明文档", contact: new NSwag.OpenApiContact { Url = "", Name = "" });

var app = builder.Build();
app.UseSerilogRequestLogging();
app.UseNSwagger();
app.UseOcelot().Wait();
app.UseAuthentication();
app.UseAuthorization();
// Configure the HTTP request pipeline.
app.MapControllers();
app.Run();

  

 

 启动服务就可以了,然后根据配置路由就可以访问其他的服务了

 

标签:网关,builder,Nacos,Ocelot,Services,using,true,app
From: https://www.cnblogs.com/ganqiyin/p/17632093.html

相关文章

  • Nacos v2.2.3 安装
    文档:https://nacos.io/zh-cn/docs/deployment.html1-安装nacos1.1-解压tar-zxvfnacos-server-2.2.3.tar.gz-C/usr/local1.2-开启鉴权cd/usr/local/nacos/confvimapplication.properties开启鉴权#nacos.core.auth.enabled=false#改成nacos.core.aut......
  • springboot 整合sentinel 和nacos实现流量控制
    方案一使用sentinel控制面板1、启动sentineljava-jarsentinel.jar2、在自己应用user中添加依赖<modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-pa......
  • nacos 单机3节点 集群env
     集群中包含3个NacosServer节点,两个Proxy主备节点,Mysql数据库主备这里仅记录Nacos的安装Nacos节点服务器节点IP端口Nacos1172.17.10.218858(默认8848)Nacos1172.17.10.228858(默认8848)Nacos1172.17.10.238858(默认8848)Nacos集群配置安装JAVA环......
  • ThingsKit物联网平台网关MQTT接入
    入门介绍在物联网中,网关的作用是将那些本身不能直接连接平台的设备,通过网关的中转,让设备接入平台。网关起到的作用是数据转发和协议转换。网关和平台的通信主要分为:网关设备自身和平台的通信,例如:上报网关自身的设备状态和属性,接收平台对网关的控制指令等。网关子设备和平台的......
  • 硬件管理平台-硬件网关-XML相关基础类
    硬件管理平台-硬件网关-XML相关基础类简介本章是硬件管理平台-硬件网关-插件模块-集成(上)的延申部分,因集成模块时还需要有配置文件的相关操作,因此需要将xml部分进行说明,其中需要说明的部分有xml的操作类、xml与硬件的交互类以及配置文件中对于xml的获取及操作。主要工作是约定xml......
  • 工业物联网网关:连接智能制造的关键
    随着工业4.0和智能制造的快速发展,工业物联网网关逐渐成为智能制造体系中的核心组件。这个物联网设备承担着设备连接、数据采集、协议转换和数据处理等多重任务,对于实现工业互联网的实时监控、远程控制、故障诊断和预测维护等功能具有重要作用。例如,在生产设备的智能化改造中,物联网......
  • Nacos2 + Mysql8 作为数据源的建表语句
    在MySQL中创建nacos用户,MySQL创建名为Nacos的Schema,并授权nacos用户可以访问。语句如下:mysql>createuser'nacos'@'%'identifiedby'password';mysql>createschemanacos;mysql>grantALLonnacos.*to'nacos'@'%';或者直接新建一个n......
  • 第五章 Gateway--服务网关
    5.1网关简介大家都都知道在微服务架构中,一个系统会被拆分为很多个微服务。那么作为客户端要如何去调用这么多的微服务呢?如果没有网关的存在,我们只能在客户端记录每个微服务的地址,然后分别去调用。 这样的架构,会存在着诸多的问题:客户端多次请求不同的微服务,增加客户端代码或......
  • nacos集群部署
    准备nacos一般集群需要至少3个节点。我们先准备3台机器: 192.168.11.200、192.168.11.196、192.168.11.126nacos的默认服务端口是8848,但是由于我们的机器上还有其他nacos服务正在作用,所以,我们这里把端口改为8748,如下:192.168.11.200:8748192.168.11.196:8748192.168.11.......
  • 2-04-Nacos配置管理-配置热更新-not practice
    所谓的热更新共有两种实现方式1.@Value+@Refresh针对单一类的配置热更新2.@ConfigurationProperties+@Autowired,针对所有类的配置热更新......