亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 服務器 > Web服務器 > 正文

.netcore 使用surging框架發布到docker

2024-09-01 13:54:16
字體:
來源:轉載
供稿:網友

demo運行在windows的docker中,系統是win10,所以需要先下載Docker for Windows,安裝完畢后系統會重啟,然后桌面上可以找到Docker for Windows的快捷圖標,右下角有個鯨魚小圖標

netcore,docker,aspnetcore

單擊右鍵,選擇菜單中的Kitematic

netcore,docker,aspnetcore

會提示你下載Kitematic,自行下載后解壓即可,將Kitematic快捷到桌面;

打開Kitematic,在搜索欄中下載好RabbitMQ、redis、consul相關鏡像,因為這些是surging運行的先決條件。

netcore,docker,aspnetcore

netcore,docker,aspnetcore

netcore,docker,aspnetcore

接著去GitHub上下載surging網關項目,修改其中的gatewaySettings.json中Register下的Address地址,對應的事consul docker鏡像的ip

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

打開Kitematic,點擊左下角,如圖:

netcore,docker,aspnetcore

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

可以看到現在運行的docker的相關信息,

如圖:

netcore,docker,aspnetcore

然后查看consul的相關配置,輸入docker inspect 鏡像的 containerID,如consul的id是b0e98b94638c,輸入命令如下:docker inspect b0e98b94638c,

顯示這個docker的配置,內容會很多,不過ip的信息在最后,如圖

netcore,docker,aspnetcore

找到其中的ip是多少,然后修改surging網關中的consul地址為:"Address": "172.17.0.4:8500",其他配置根據上面的操作進行修改,如redis 鏡像地址的查找和修改等;

修改好surging的網關配置后在Surging.ApiGateway項目上單擊右鍵,由于我項目中已經添加過,所以該處為灰色,如圖:

netcore,docker,aspnetcore

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

netcore,docker,aspnetcore

在后面添加docker的外部端口和內部端口的映射和網絡模式,這里我們都使用橋接模式,包括之前的consul、RabbitMQ、redis都是同一模式,這樣他們會在同一VLAN下,

然后運行網關,如下:

netcore,docker,aspnetcore

接下來新建一個解決方案,方案名隨意,喜歡就好,由于時間比較短,這里我簡單的處理,不清楚的可以留言

新建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,如下

netcore,docker,aspnetcore

將其中的引用包都復制過去,分別修改一下對應的Service,即其中的<ProjectReference Include="../Service.A.Service/Service.A.Service.csproj" />,Service.A引用Service.A.Service,Service.B引用Service.B.Service

Service.C引用Service.C.Service;

類庫Service.A.Service、Service.B.Service、Service.C.Service中都引用

<PackageReference Include="surging" Version="0.5.4" />

如圖:

netcore,docker,aspnetcore

由于代碼很多地方相識,以下我只說Service.A,和Service.A.Service;

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

<log4net> <root> <level value="Error" /> <!-- <appender-ref ref="RollingLogFileAppender" /> --> <appender-ref ref="ErrorRollingLogFileAppender" /> </root> <appender name="ErrorRollingLogFileAppender" type="log4net.Appender.RollingFileAppender,log4net" LEVEL="ERROR"> <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> <param name="File" value="c:/surging/Error/" /> <param name="AppendToFile" value="true" /> <param name="RollingStyle" value="Composite" /> <param name="DatePattern" value="_yyyyMMddHH.TXT" /> <param name="StaticLogFileName" value="false" /> <param name="MaxSizeRollBackups" value="-1" /> <param name="MaximumFileSize" value="5MB" /> <layout type="log4net.Layout.PatternLayout,log4net">  <param name="ConversionPattern" value="%date [%thread] %-5level %logger [%ndc] - %message%newline" /> </layout> <filter type="log4net.Filter.LevelRangeFilter">  <param name="LevelMin" value="ERROR" />  <param name="LevelMax" value="FATAL" /> </filter> </appender></log4net>

然后新增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<Startup>()    .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<ILoggerFactory>()     .AddConsole((c, l) => (int)l >= 3);  }  #region 私有方法  /// <summary>  /// 配置日志服務  /// </summary>  /// <param name="services"></param>  private void ConfigureLogging(IServiceCollection services)  {   services.AddLogging();  }   private static void ConfigureEventBus(IConfigurationBuilder build)  {   build   .AddEventBusFile("eventBusSettings.json", optional: false);  }   /// <summary>  /// 配置緩存服務  /// </summary>  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<string> 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<string> SayHello(string name);  }}

其他類庫和服務與以上代碼基本無二,這里不在贅述。不清楚的可以留言

所有代碼都處理好后,在Service.A、Service.B、Service.C項目上右鍵新增docker支持文件,然后會生成一下文件

netcore,docker,aspnetcore

修改其中的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,docker,aspnetcore

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到服務器教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美日韩成人精品| 国产精品一区电影| 欧美日韩一区二区三区| 欧美国产高跟鞋裸体秀xxxhd| 精品日韩视频在线观看| 欧美日韩国产成人高清视频| 欧美性猛交xxxx乱大交3| 久久精品99无色码中文字幕| 亚洲精选一区二区| 精品久久久免费| 久久久国产成人精品| 亚洲奶大毛多的老太婆| 亚洲精品成人久久久| 亚洲第一视频网| 国产成人精品在线视频| 欧美主播福利视频| 8050国产精品久久久久久| 久色乳综合思思在线视频| 亚洲女人被黑人巨大进入al| 日韩女优在线播放| 久久久久久69| 国产一区深夜福利| 亚洲a级在线播放观看| 91亚洲一区精品| xxx欧美精品| 欧美午夜片在线免费观看| 粉嫩老牛aⅴ一区二区三区| 欧美性生交xxxxxdddd| 欧美成人性色生活仑片| 777777777亚洲妇女| 久久视频在线视频| 久久久久久com| 亚洲综合精品一区二区| 亚洲一区二区三区sesese| 亚洲白拍色综合图区| 91天堂在线视频| 中文.日本.精品| 久久久这里只有精品视频| 欧美亚洲在线播放| 久久99久久99精品免观看粉嫩| 欧美激情极品视频| 亚洲视频电影图片偷拍一区| 亚洲乱码国产乱码精品精| 欧美电影在线免费观看网站| 91中文字幕在线| 国产一区二区在线播放| 欧美性xxxx极品hd欧美风情| 日韩中文在线不卡| 中文字幕精品影院| 欧美极品美女电影一区| 色综合久久悠悠| 欧美一区二区.| 精品中文字幕在线观看| 欧美精品激情blacked18| 日韩精品极品视频| 久久噜噜噜精品国产亚洲综合| 亚洲国产精品视频在线观看| 日韩国产中文字幕| 日韩男女性生活视频| 日韩在线视频中文字幕| 欧美性一区二区三区| 国产精品中文在线| 国产精品久久久精品| 一本大道久久加勒比香蕉| 亚洲午夜未满十八勿入免费观看全集| 亚洲国产日韩欧美在线图片| 精品自拍视频在线观看| 亚洲高清免费观看高清完整版| 日韩美女福利视频| 九色成人免费视频| 亚洲风情亚aⅴ在线发布| 中文字幕亚洲综合久久筱田步美| 国产ts人妖一区二区三区| 日本一区二区不卡| 有码中文亚洲精品| 色偷偷888欧美精品久久久| 国产久一一精品| 亚洲欧洲自拍偷拍| www.久久久久久.com| 日本高清+成人网在线观看| 欧美性极品xxxx娇小| 精品久久中文字幕久久av| 成人免费黄色网| 97国产精品视频人人做人人爱| 久久久综合av| 国产一区二区在线播放| 亚洲欧美中文日韩v在线观看| 国产va免费精品高清在线| 深夜福利国产精品| 国产精品第一视频| 欧美性高潮床叫视频| zzijzzij亚洲日本成熟少妇| 国产91精品青草社区| 日韩精品高清在线观看| 精品久久久久久中文字幕大豆网| 欧美精品久久一区二区| 国产综合色香蕉精品| 国产亚洲成av人片在线观看桃| 国产69精品久久久久久| 成人精品aaaa网站| 91av免费观看91av精品在线| 国产欧美在线视频| 欧美三级欧美成人高清www| 欧美一区在线直播| 亚洲成人国产精品| 免费av一区二区| 久久久精品国产| 黑人欧美xxxx| 中文字幕精品在线视频| 欧美日韩国产一区在线| 搡老女人一区二区三区视频tv| 亚洲成人在线视频播放| 久久久女女女女999久久| 国产精品久久久久77777| 亚洲欧美制服第一页| 欧美在线视频播放| 亚洲福利在线视频| 91a在线视频| 成人激情黄色网| 欧美最顶级的aⅴ艳星| 亚洲人成电影在线观看天堂色| 视频一区视频二区国产精品| 成人a在线视频| 日韩av电影院| 欧美国产高跟鞋裸体秀xxxhd| 日韩精品福利在线| 国产极品精品在线观看| 色yeye香蕉凹凸一区二区av| 亚洲一区二区三区成人在线视频精品| 久久69精品久久久久久国产越南| 国产一区二区三区在线播放免费观看| 中文日韩在线视频| 亚洲激情视频网| 欧美成人合集magnet| 成人在线一区二区| 国产精品一区二区3区| 国内偷自视频区视频综合| 日本精品一区二区三区在线播放视频| 亚洲欧美一区二区精品久久久| 岛国av一区二区在线在线观看| 77777亚洲午夜久久多人| 亚洲欧美在线免费| 国产精品极品在线| 91免费版网站入口| 国产成人激情视频| 亚洲少妇中文在线| 欧美另类第一页| 欧美日韩激情视频| 中文字幕欧美日韩在线| 日韩视频在线一区| 国产精品久久久久久久久久久新郎| 综合激情国产一区| 久久精品欧美视频| 国产自产女人91一区在线观看| 97免费视频在线播放| 亚洲最大成人免费视频| 亚洲欧美日韩视频一区| 国产高清视频一区三区| 国产盗摄xxxx视频xxx69| 欧美极品美女视频网站在线观看免费| 精品无人区乱码1区2区3区在线| 精品成人乱色一区二区| 欧美日韩视频免费播放| 久久久91精品|