这篇文章将为大家详细讲解有关.netcore如何使用surging框架发布到docker,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
创新互联-专业网站定制、快速模板网站建设、高性价比玛多网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式玛多网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖玛多地区。费用合理售后完善,十载实体公司更值得信赖。
demo运行在windows的docker中,系统是win10,所以需要先下载Docker for Windows,安装完毕后系统会重启,然后桌面上可以找到Docker for Windows的快捷图标,右下角有个鲸鱼小图标

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

会提示你下载Kitematic,自行下载后解压即可,将Kitematic快捷到桌面;
打开Kitematic,在搜索栏中下载好RabbitMQ、redis、consul相关镜像,因为这些是surging运行的先决条件。


.jpg)
接着去GitHub上下载surging网关项目,修改其中的gatewaySettings.json中Register下的Address地址,对应的事consul docker镜像的ip
具体如何查看其ip,看如下操作:
打开Kitematic,点击左下角,如图:
.jpg)
进入到命令窗口,输入docker container ls或者 docker ps -a 查看docker,
可以看到现在运行的docker的相关信息,
如图:
.jpg)
然后查看consul的相关配置,输入docker inspect 镜像的 containerID,如consul的id是b0e98b94638c,输入命令如下:docker inspect b0e98b94638c,
显示这个docker的配置,内容会很多,不过ip的信息在最后,如图
.jpg)
找到其中的ip是多少,然后修改surging网关中的consul地址为:"Address": "172.17.0.4:8500",其他配置根据上面的操作进行修改,如redis 镜像地址的查找和修改等;
修改好surging的网关配置后在Surging.ApiGateway项目上单击右键,由于我项目中已经添加过,所以该处为灰色,如图:
.jpg)
新建docker-Compose后修改其中docker-compose.yml的配置如下:
.jpg)
在后面添加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,如下
.jpg)
将其中的引用包都复制过去,分别修改一下对应的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支持文件,然后会生成一下文件
.jpg)
修改其中的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”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
当前标题:.netcore如何使用surging框架发布到docker
文章网址:http://www.scyingshan.cn/article/jcegic.html

 建站
建站
 咨询
咨询 售后
售后
 建站咨询
建站咨询 
 