纪录下最近玩的这个方案。
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
}
]
}