网站运营
位置:首页>> 网站运营>> .netcore 使用surging框架发布到docker

.netcore 使用surging框架发布到docker

作者:landonzeng  发布时间:2023-12-21 17:28:00 

标签:netcore,docker

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

.netcore 使用surging框架发布到docker

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

.netcore 使用surging框架发布到docker

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

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

.netcore 使用surging框架发布到docker

.netcore 使用surging框架发布到docker

.netcore 使用surging框架发布到docker

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

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

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

.netcore 使用surging框架发布到docker

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

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

如图:

.netcore 使用surging框架发布到docker

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

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

.netcore 使用surging框架发布到docker

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

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

.netcore 使用surging框架发布到docker

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

.netcore 使用surging框架发布到docker

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

然后运行网关,如下:

.netcore 使用surging框架发布到docker

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

新建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 使用surging框架发布到docker

将其中的引用包都复制过去,分别修改一下对应的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 使用surging框架发布到docker

由于代码很多地方相识,以下我只说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 使用surging框架发布到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

来源:https://www.cnblogs.com/landonzeng/p/8612026.html

0
投稿

猜你喜欢

  • 2010年支付宝推出了全新的体验版,在改进体验的同时也重新布置了业务底层,使产品更加贴近设计初衷。也希望能够给用户带来更好的体验。以上不是这
  • 虚拟服务器:对外它是单一的入口,对内有很多台计算机为它服务.对使用它的人来说,它是一台机器,有单一的入口点.具体的实现技术包括两种: 应用层
  • 你一定很喜欢像QQ或者MSN好友登录提示的效果吧,那么怎么样能在网页中实现呢?正好我在蓝色理想中发现了这段代码,贴出给大家看看(注意,如果使
  • 大量复制内容网站有的时候会影响关键字的排名。比如说原本是你写的文章,本来应该排名很好,但是其他人抄袭或转载你的文章,而且搜索引擎不幸的判断那
  • xiaoxue总不能这样耗下去了,为了爱,,为了我的家,我要赚钱。简单的介绍一下自己吧:1988年5月出生了一个牛逼闪闪的我,我小时候大病三
  • 随着浏览器的更迭越频繁功能越强大,很多以前只在特定客户端实现的功能也纷纷依托浏览器在网络上重生,网页办公套件、网页游戏、网页IM……一时之间
  • Mozilla终于发布Firefox 3.6正式版了,这对Firefox来说又是一个具有里程碑意义的版本。也可能是一年之内唯一的一个主要版本
  • 在cloudstack4.5.2版本下,偶尔出现libvirtd服务无响应的情况,导致virsh命令无法使用,同时伴随cloudstack
  • 最新dedecms5.6删除文章对应删除图片本代码没改dede代码!只加了删除方法到里面!覆盖就可以了!覆盖时备份好文件!您也可以看着对应修
  • iWeb SNS是聚易(Jooyea)旗下iWebAx家族首款开源软件产品,自iWeb SNS beta版发布以来,收到不少热心用户的反馈,
  • 在WP2.7的时候就推出了快捷键功能。(若按键无效,则可以在后台快捷键那个设置的地方打上勾就可以了),相信很少会有人注意到,我也是刚不小心看
  • 本文探讨如何从内部链接、引入链接和引出链接三个方面来增加网站的链接广泛度。网站的链接广泛度(Link Popularity)在搜索引擎排名中
  • 本文实例讲述了linux文件管理命令。分享给大家供大家参考,具体如下:1、显示文件内容cat  :  显示文件内容tac
  • 12月3日消息,据国外媒体报道,微软将发布更新版本的地图服务。这项服务将有街道级的视图和跟踪鸣叫、交通和其它具体位置数据的新的应用程序。微软
  • 10月14日消息,据国外媒体报道,今年第二季度,中国网络游戏收入同比增长了39.5%至9.06亿美元,腾讯公司上升至榜首,领先于竞争对手盛大
  • 如何在涉世之初少走弯路,有一个好的开端,开始一番成功的事业?以下是一些先行者积累的10条有益的涉世忠告。好好地遵循、把握这些忠告和建议吧,比
  • linux 安装 pypy自己使用的系统是 centos 7(其他linux机器的安装方法类似)首先下载pypy 的rpm包。http://
  • 据国外媒体报道,微软董事会主席比尔·盖茨(Bill Gates)周二表示,互联网技术将在今后十年发生巨大变革。盖茨是在受韩国总统李明博接见时
  • 在某些场景中,我们希望在 Linux 服务器(CentOS/RHEL)的同一块以太网卡(NIC)上分配来自不同 VLAN 的多个 IP。这个
  • 今天,服务器进行PHP环境的配置,先在百度搜集了一些相关资料进行参考,然后开始手工配置PHP5环境(个人比较喜欢绿色免安装的东西)。在Win
手机版 网站运营 asp之家 www.aspxhome.com