千家信息网

.netcore如何使用surging框架发布到docker

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章将为大家详细讲解有关.netcore如何使用surging框架发布到docker,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。demo运行在windows的
千家信息网最后更新 2026年11月03日.netcore如何使用surging框架发布到docker

这篇文章将为大家详细讲解有关.netcore如何使用surging框架发布到docker,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

demo运行在windows的docker中,系统是win10,所以需要先下载Docker for Windows,安装完毕后系统会重启,然后桌面上可以找到Docker for Windows的快捷图标,右下角有个鲸鱼小图标

单击右键,选择菜单中的Kitematic

会提示你下载Kitematic,自行下载后解压即可,将Kitematic快捷到桌面;

打开Kitematic,在搜索栏中下载好RabbitMQ、redis、consul相关镜像,因为这些是surging运行的先决条件。

接着去GitHub上下载surging网关项目,修改其中的gatewaySettings.json中Register下的Address地址,对应的事consul docker镜像的ip

具体如何查看其ip,看如下操作:

打开Kitematic,点击左下角,如图:

进入到命令窗口,输入docker container ls或者 docker ps -a 查看docker,

可以看到现在运行的docker的相关信息,

如图:

然后查看consul的相关配置,输入docker inspect 镜像的 containerID,如consul的id是b0e98b94638c,输入命令如下:docker inspect b0e98b94638c,

显示这个docker的配置,内容会很多,不过ip的信息在最后,如图

找到其中的ip是多少,然后修改surging网关中的consul地址为:"Address": "172.17.0.4:8500",其他配置根据上面的操作进行修改,如redis 镜像地址的查找和修改等;

修改好surging的网关配置后在Surging.ApiGateway项目上单击右键,由于我项目中已经添加过,所以该处为灰色,如图:

新建docker-Compose后修改其中docker-compose.yml的配置如下:

在后面添加docker的外部端口和内部端口的映射和网络模式,这里我们都使用桥接模式,包括之前的consul、RabbitMQ、redis都是同一模式,这样他们会在同一VLAN下,

然后运行网关,如下:

接下来新建一个解决方案,方案名随意,喜欢就好,由于时间比较短,这里我简单的处理,不清楚的可以留言

新建Service.A,然后在其下新建控制台应用Service.A、Service.B、Service.C,新建类库Service.A.Service、Service.B.Service、Service.C.Service;

编辑Service.A.csporj、Service.B.csporj、Service.C.csporj,如下

将其中的引用包都复制过去,分别修改一下对应的Service,即其中的,Service.A引用Service.A.Service,Service.B引用Service.B.Service

Service.C引用Service.C.Service;

类库Service.A.Service、Service.B.Service、Service.C.Service中都引用

如图:

由于代码很多地方相识,以下我只说Service.A,和Service.A.Service;

Service.A 中新增Configs文件夹,下面添加log4net.config,log4net.config代码如下:

                         

然后新增cacheSettings.json其中Map:Properties下的value的值是redis地址

{  "CachingSettings": [  {  "Id": "ddlCache",  "Class": "Surging.Core.Caching.RedisCache.RedisContext,Surging.Core.Caching",  "Properties": [   {   "Name": "appRuleFile",   "Ref": "rule"   },   {   "Name": "dataContextPool",   "Ref": "ddls_sample",   "Maps": [    {    "Name": "Redis",    "Properties": [    {     "value": "172.17.0.2:6379::1"     }    ]    },    {    "Name": "MemoryCache"    }   ]   },   {   "Name": "defaultExpireTime",   "value": "120"   },   {   "Name": "connectTimeout",   "Value": "120"   },   {   "Name": "minSize",   "Value": "1"   },   {   "Name": "maxSize",   "Value": "10"   }  ]  } ]}

新增eventBusSettings.json,其中的EventBusConnection对应的是RabbitMQ docker的地址

{ "EventBusConnection": "172.17.0.3", "EventBusUserName": "guest", "EventBusPassword": "guest"}

Program.cs的代码如下

using Autofac;using Surging.Core.Codec.MessagePack;using Surging.Core.Consul;using Surging.Core.Consul.Configurations;using Surging.Core.CPlatform;using Surging.Core.CPlatform.Utilities;using Surging.Core.DotNetty;using Surging.Core.EventBusRabbitMQ;using Surging.Core.Log4net;using Surging.Core.ProxyGenerator;using Surging.Core.ServiceHosting;using Surging.Core.ServiceHosting.Internal.Implementation;using System;using System.Text;namespace Service.A{ class Program {  static void Main(string[] args)  {   NewMethod();  }  private static void NewMethod()  {   Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);   var host = new ServiceHostBuilder()    .RegisterServices(builder =>    {     builder.AddMicroService(option =>     {      option.AddServiceRuntime();      option.AddRelateService();      //option.UseZooKeeperManager(new ConfigInfo("127.0.0.1:2181"));      option.UseConsulManager(new ConfigInfo("172.17.0.4:8500"));      option.UseDotNettyTransport();      option.UseRabbitMQTransport();      option.AddRabbitMQAdapt();      //option.UseProtoBufferCodec();      option.UseMessagePackCodec();      builder.Register(p => new CPlatformContainer(ServiceLocator.Current));     });    })    .SubscribeAt()    .UseLog4net("Configs/log4net.config")    //.UseServer("127.0.0.1", 98)    //.UseServer("127.0.0.1", 98,"true") //自动生成Token    //.UseServer("127.0.0.1", 98,"123456789") //固定密码Token    .UseServer(options =>    {     options.Ip = "172.17.0.6";     options.Port = 9990;     options.Token = "True";     options.ExecutionTimeoutInMilliseconds = 30000;     options.MaxConcurrentRequests = 200;     options.NotRelatedAssemblyFiles = "Centa.Agency.Application.DTO\\w*|StackExchange.Redis\\w*";    })    .UseProxy()    .UseStartup()    .Build();   using (host.Run())   {    Console.WriteLine($"服务端启动成功,{DateTime.Now}。");   }  } }}

新增Startup.cs

using Autofac;using Autofac.Extensions.DependencyInjection;using Microsoft.Extensions.Configuration;using Microsoft.Extensions.DependencyInjection;using Microsoft.Extensions.Logging;using Surging.Core.Caching.Configurations;using Surging.Core.CPlatform.Utilities;using Surging.Core.EventBusRabbitMQ.Configurations;using System;namespace Service.A{ public class Startup {  public Startup()  {   var config = new ConfigurationBuilder()   .SetBasePath(AppContext.BaseDirectory);   ConfigureEventBus(config);   //ConfigureCache(config);  }  public IContainer ConfigureServices(ContainerBuilder builder)  {   var services = new ServiceCollection();   ConfigureLogging(services);   builder.Populate(services);   ServiceLocator.Current = builder.Build();   return ServiceLocator.Current;  }  public void Configure(IContainer app)  {   app.Resolve()     .AddConsole((c, l) => (int)l >= 3);  }  #region 私有方法  ///   /// 配置日志服务  ///   ///   private void ConfigureLogging(IServiceCollection services)  {   services.AddLogging();  }   private static void ConfigureEventBus(IConfigurationBuilder build)  {   build   .AddEventBusFile("eventBusSettings.json", optional: false);  }   ///   /// 配置缓存服务  ///   private void ConfigureCache(IConfigurationBuilder build)  {   build    .AddCacheFile("cacheSettings.json", optional: false);  }  #endregion }}

Service.A.Service 类库下新增AService.cs

using Surging.Core.ProxyGenerator;using System;using System.Collections.Generic;using System.Text;using System.Threading.Tasks;namespace Service.A.Service{ public class AService:ProxyServiceBase,IAService {  public Task SayHello(string name)  {   return Task.FromResult($"{name} say : hello");  } }}

新增IAService.cs

using Surging.Core.CPlatform.Ioc;using Surging.Core.CPlatform.Runtime.Server.Implementation.ServiceDiscovery.Attributes;using System;using System.Collections.Generic;using System.Text;using System.Threading.Tasks;namespace Service.A.Service{ [ServiceBundle("api/{Service}")] public interface IAService : IServiceKey {  Task SayHello(string name);  }}

其他类库和服务与以上代码基本无二,这里不在赘述。不清楚的可以留言

所有代码都处理好后,在Service.A、Service.B、Service.C项目上右键新增docker支持文件,然后会生成一下文件

修改其中的docker-compose.yml

version: '3' services: service.a: image: servicea ports:  - "127.0.0.1:9990:9990" network_mode: "bridge" build:  context: .  dockerfile: Service.A/Dockerfile  service.b: image: serviceb ports:  - "127.0.0.1:9991:9991" network_mode: "bridge" build:  context: .  dockerfile: Service.B/Dockerfile  service.c: image: servicec ports:  - "127.0.0.1:9992:9992" network_mode: "bridge" build:  context: .  dockerfile: Service.C/Dockerfile  webapplication1: image: webapplication1 build:  context: .  dockerfile: ../WebApplication1/Dockerfile

然后选择docker运行即可

最后访问surging网关,即可看见效果

关于".netcore如何使用surging框架发布到docker"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

配置 代码 地址 网关 如图 运行 镜像 项目 服务 文件 模式 篇文章 输入 框架 清楚 信息 内容 命令 图标 方案 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 博彦科技互联网金融 南京欣网互联网络科技有限公司 互联网科技工作委员会主任 上海互联网科技有限公司 互联网医疗科技 安徽鑫晟辉互联网科技 郑州华宇互联网科技 汉立互联网科技有限公司联系电话 老年人脱离互联网科技的作文 阿里互联网科技公司 现代互联网科技股 互联网大会黑科技排名 宁夏众和广鑫互联网科技有限公司 荆州市昕露互联网络科技有限公司 明优互联网科技有限公司 长沙互联网科技 烟台灵鸽互联网科技有限公司 广州三三互联网科技有限公司 第三届互联网大会安防黑科技 互联网大会出现的黑科技 互联网科技网 江苏根荣互联网科技 互联网和科技技术 科技企业和互联网企业 狮子座互联网科技 互联网科技公司官网 海南科技产业互联网平台 上海钢联属于互联网科技股吗 北京市互联网新科技 济南小医互联网科技有限公司招聘
0