欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

.netcore 使用surging框架發(fā)布到docker

 更新時(shí)間:2018年03月21日 11:01:55   作者:landonzeng  
這篇文章主要介紹了netcore 使用surging框架發(fā)布到docker,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

demo運(yùn)行在windows的docker中,系統(tǒng)是win10,所以需要先下載Docker for Windows,安裝完畢后系統(tǒng)會(huì)重啟,然后桌面上可以找到Docker for Windows的快捷圖標(biāo),右下角有個(gè)鯨魚(yú)小圖標(biāo)

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

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

打開(kāi)Kitematic,在搜索欄中下載好RabbitMQ、redis、consul相關(guān)鏡像,因?yàn)檫@些是surging運(yùn)行的先決條件。

接著去GitHub上下載surging網(wǎng)關(guān)項(xiàng)目,修改其中的gatewaySettings.json中Register下的Address地址,對(duì)應(yīng)的事consul docker鏡像的ip

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

打開(kāi)Kitematic,點(diǎn)擊左下角,如圖:

進(jìn)入到命令窗口,輸入docker container ls或者 docker ps -a 查看docker,

可以看到現(xiàn)在運(yùn)行的docker的相關(guān)信息,

如圖:

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

顯示這個(gè)docker的配置,內(nèi)容會(huì)很多,不過(guò)ip的信息在最后,如圖

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

修改好surging的網(wǎng)關(guān)配置后在Surging.ApiGateway項(xiàng)目上單擊右鍵,由于我項(xiàng)目中已經(jīng)添加過(guò),所以該處為灰色,如圖:

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

在后面添加docker的外部端口和內(nèi)部端口的映射和網(wǎng)絡(luò)模式,這里我們都使用橋接模式,包括之前的consul、RabbitMQ、redis都是同一模式,這樣他們會(huì)在同一VLAN下,

然后運(yùn)行網(wǎng)關(guān),如下:

接下來(lái)新建一個(gè)解決方案,方案名隨意,喜歡就好,由于時(shí)間比較短,這里我簡(jiǎn)單的處理,不清楚的可以留言

新建Service.A,然后在其下新建控制臺(tái)應(yīng)用Service.A、Service.B、Service.C,新建類(lèi)庫(kù)Service.A.Service、Service.B.Service、Service.C.Service;

編輯Service.A.csporj、Service.B.csporj、Service.C.csporj,如下

將其中的引用包都復(fù)制過(guò)去,分別修改一下對(duì)應(yīng)的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;

類(lèi)庫(kù)Service.A.Service、Service.B.Service、Service.C.Service中都引用

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

如圖:

由于代碼很多地方相識(shí),以下我只說(shuō)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對(duì)應(yīng)的是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”) //自動(dòng)生成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($"服務(wù)端啟動(dòng)成功,{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>
  /// 配置日志服務(wù)
  /// </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>
  /// 配置緩存服務(wù)
  /// </summary>
  private void ConfigureCache(IConfigurationBuilder build)
  {
   build
    .AddCacheFile("cacheSettings.json", optional: false);
  }
  #endregion
 }
}

Service.A.Service 類(lèi)庫(kù)下新增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); 
 }
}

其他類(lèi)庫(kù)和服務(wù)與以上代碼基本無(wú)二,這里不在贅述。不清楚的可以留言

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

修改其中的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運(yùn)行即可

最后訪問(wèn)surging網(wǎng)關(guān),即可看見(jiàn)效果

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Docker部署Tomcat并開(kāi)放8082端口的實(shí)現(xiàn)步驟

    Docker部署Tomcat并開(kāi)放8082端口的實(shí)現(xiàn)步驟

    本文主要介紹了Docker部署Tomcat并開(kāi)放8082端口的實(shí)現(xiàn)步驟,首先安裝docker環(huán)境,創(chuàng)建tomcat鏡像,隨后開(kāi)放端口,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-10-10
  • CentOS7虛擬機(jī)安裝并配置docker套件

    CentOS7虛擬機(jī)安裝并配置docker套件

    這篇文章主要介紹了CentOS7虛擬機(jī)安裝并配置docker套件,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-07
  • 如何批量刪除Docker中已經(jīng)停止的容器的幾種方法

    如何批量刪除Docker中已經(jīng)停止的容器的幾種方法

    本文主要介紹了批量刪除Docker中已經(jīng)停止的容器的幾種方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • 手工制作docker鏡像-包含多個(gè)服務(wù)ssh+nginx

    手工制作docker鏡像-包含多個(gè)服務(wù)ssh+nginx

    這篇文章主要介紹了手工制作docker鏡像-包含多個(gè)服務(wù)ssh+nginx,需要的朋友可以參考下
    2024-07-07
  • Docker查看正在運(yùn)行的容器目錄的實(shí)現(xiàn)方式

    Docker查看正在運(yùn)行的容器目錄的實(shí)現(xiàn)方式

    這篇文章主要介紹了Docker查看正在運(yùn)行的容器目錄的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • Docker學(xué)習(xí)筆記之k8s部署方法

    Docker學(xué)習(xí)筆記之k8s部署方法

    這篇文章主要介紹了Docker學(xué)習(xí)筆記之k8s部署方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-04-04
  • Docker容器如何更新打包并上傳到阿里云

    Docker容器如何更新打包并上傳到阿里云

    這篇文章主要介紹了Docker容器如何更新打包并上傳到阿里云,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09
  • 清理docker占用磁盤(pán)過(guò)大問(wèn)題終極方案(親測(cè)有效!)

    清理docker占用磁盤(pán)過(guò)大問(wèn)題終極方案(親測(cè)有效!)

    Docker很占用空間每當(dāng)我們運(yùn)行容器、拉取鏡像、部署應(yīng)用、構(gòu)建自己的鏡像時(shí)我們的磁盤(pán)空間會(huì)被大量占用,這篇文章主要給大家介紹了關(guān)于清理docker占用磁盤(pán)過(guò)大問(wèn)題終極方案,需要的朋友可以參考下
    2024-04-04
  • Docker管理面板SimpleDocker的具體使用

    Docker管理面板SimpleDocker的具體使用

    SimpleDocker 是一個(gè)簡(jiǎn)單的Docker控制面板,本文主要介紹了Docker管理面板SimpleDocker的具體使用,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-08-08
  • docker部署zookeeper集群方式(單主機(jī)、多主機(jī))

    docker部署zookeeper集群方式(單主機(jī)、多主機(jī))

    這篇文章主要介紹了docker部署zookeeper集群方式(單主機(jī)、多主機(jī)),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-04-04

最新評(píng)論