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,即其中的<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" />

如图:

由于代码很多地方相识,以下我只说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 = ;
options.Token = "True";
options.ExecutionTimeoutInMilliseconds = ;
options.MaxConcurrentRequests = ;
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 >= );
} #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支持文件,然后会生成一下文件

修改其中的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的更多相关文章

  1. netcore 使用surging框架发布到docker

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

  2. Taurus.MVC 微服务框架 入门开发教程:项目部署:4、微服务应用程序发布到Docker部署(上)。

    系列目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 开源地址:https://github.com/cyq1162/Taurus.MVC 本系列第一篇:Tauru ...

  3. Taurus.MVC 微服务框架 入门开发教程:项目部署:5、微服务应用程序发布到Docker部署(下)。

    系列目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 开源地址:https://github.com/cyq1162/Taurus.MVC 本系列第一篇:Tauru ...

  4. [转载]剥析surging的架构思想

    1.前言 2.通信机制 2.1 简介      在单体应用中,模块之间的调用通信通过引用加载方法或者函数来实现,但是单体应用最终都会因为团队壮大,项目模块的扩展和部署等出现难以维护的问题.随着业务需求 ...

  5. Spring Boot工程发布到Docker

    先聊聊闲话 搞过企业级的application运维的同仁肯定深有感触,每个application的功能交叉错杂,数据交换就让人焦头烂额(当然这和顶层业务设计有关系), 几十个application发布 ...

  6. 手把手0基础项目实战(一)——教你搭建一套可自动化构建的微服务框架(SpringBoot+Dubbo+Docker+Jenkins)...

    原文:手把手0基础项目实战(一)--教你搭建一套可自动化构建的微服务框架(SpringBoot+Dubbo+Docker+Jenkins)... 本文你将学到什么? 本文将以原理+实战的方式,首先对& ...

  7. Tao 1.2.0图形框架发布

    Tao 1.2.0图形框架发布         Tao图形框架是方便在Mono和.Net环境下进行游戏相关开发的库绑定和实用工具集.目前,对以下库提供支持: Cg - [Cg website] Dev ...

  8. Docker入门系列之三:如何将dockerfile制作好的镜像发布到Docker hub上

    这个系列的前两篇文章,我们已经把我们的应用成功地在Docker里通过nginx运行了起来,并且用dockerfile里制作好了一个镜像. Docker入门系列之一:在一个Docker容器里运行指定的w ...

  9. .net core 发布到docker

    1. 安装docker-desktop,windows环境安装包 官方网站:https://www.docker.com/ 2.注册登陆Docker账号 安装成功后,在官方网站注册一个账号,使用账号登 ...

随机推荐

  1. js--27门面模式

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/stri ...

  2. 类名引用static变量好处

    不仅强调了变量static的结构,而且在有些情况下他还为编译器进行优化提供了更好的机会.

  3. JS前端监控机制的建立

    JS前端监控机制: 1.采用try...catch...,和window.onerror的形式. 2.最终形成错误日志文件,并发送邮件和短信的形式进行报警. 3.如果是跨域请求,在script标签上要 ...

  4. BZOJ5394: [Ynoi2016]炸脖龙(欧拉广义降幂)

    就是让你求这个: 传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=5394 解题思路: NOIP2018后第一道题,感觉非常像那个上帝与集合的 ...

  5. 小米开源文件管理器MiCodeFileExplorer-源码研究(0)-初步研究

    2011年对着书本Android应用开发揭秘,写了2个月的HelloWorld.   现在想复习并深入,我没有耐心再去一点点地敲代码了.   4年前自己是个学生,实习,现在有工作,只能业余时间研究. ...

  6. SpringCloud核心教程 | 第三篇:服务注册与发现 Eureka篇

    Spring Cloud简介 Spring Cloud是一个基于Spring Boot实现的云应用开发工具,它为基于JVM的云应用开发中涉及的配置管理.服务发现.断路器.智能路由.微代理.控制总线.全 ...

  7. 【Codeforces Round #452 (Div. 2) A】 Splitting in Teams

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 贪心 1优先和2组队. 如果1没有了 就结束. 如果1还有多余的. 那么就自己3个3个组队 [代码] #include <bi ...

  8. Android开发工具之adt-bundle-windows

    adt-bundle-windows是非常久之前的android开发工具.是集成了ADT版本号的eclipse,可是里面并没有下载SDK.这个须要自己单独下载,这个工具适合刚開始学习的人使用. 由于刚 ...

  9. cocos2d-x 3.x游戏开发学习笔记(1)--mac下配置cocos2d-x 3.x开发环境

    打开用户文件夹下.bash_profile文件,配置环境 vim ~/.bash_profile //按键i,进行插入编辑(假设输错d进行删除一行) 环境配置过程例如以下: 1.首先配置下androi ...

  10. HDU 5071 模拟

    考察英语的题 - -# 按条件模拟,一遍即可了,每一个聊天对象有其价值U.数组模拟队列过程即可,若存在Top标记,则和Top标记的人聊天,否则和队列的第一个人聊天 mark记录队尾,top记录Top操 ...