使用silky脚手架构建微服务应用
模板简介
使用 dotnet new 命令可以创建模板,也就是我们常说的脚手架工具。silky框架提供了两种类型的模板,开发者可以选择合适的模板构建微服务应用。
构建独立应用的模板Silky.App.Template
如果开发者需要独立的开发、管理微服务应用(将微服务应用单独放在一个仓库管理),可以使用Silky.App.Template模板构建微服务应用。
- 安装 Silky.App.Template 模板
dotnet new --install Silky.App.Template::3.0.2
- 创建微服务应用
通过如下命令创建一个新的微服务应用:
dotnet new silky.module --hosttype webhost -p:i --includeinfrastr -n Demo
Silky.App.Template 模板参数:
| 短命令 | 长命令 | 说明 | 缺省值 |
|---|---|---|---|
| -r | --rpcToken | 设置rpctoken | ypjdYOzNd4FwENJiEARMLWwK0v7QUHPW |
| -rp | --rpcPort | 设置rpc端口 | 2200 |
| -re | --registrycentertype | 服务注册中心类型 | Zookeeper |
| -p:r | --registrycenterconnections | 服务注册中心链接地址 | 127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183;127.0.0.1:2184,127.0.0.1:2185,127.0.0.1:2186 |
| -p:re | --redisenable | 是否可用redis服务 | true |
| --redisconfiguration | redis服务配置 | 127.0.0.1:6379,defaultDatabase=0 | |
| -d | --dockersupport | 是否支持docker | true |
| -do | --dotnetenv | 设置运行开发环境 | Development |
| -in | --includeinfrastr | 是否包含基础服务编排文件 | true |
| -p:i | --includesln | 是否包括解决访问文件 | true |
| -p:d | --dockernetwork | 设置docker network | silky_service_net |
| -ho | --hosttype | 设置主机类型: webhost, generalhost ,websockethost, gateway | webhost |
使用 Silky.App.Template 模板创建的微服务应用的目录结构:
.
├─docker-compose // docker-compose编排文件
│ ├─Demo // Demo微服务应用服务编排
│ └─infrastr // 基础服务编排文件
│ └─sql
└─src // 源代码目录
├─Demo.Application // 应用层
│ └─System
├─Demo.Application.Contracts // 应用接口层,用于定义服务,可被其他微服务应用引用
│ └─System
│ └─Dtos
├─Demo.Database.Migrations // 数据迁移项目(属于基础设施层),用于存放ef迁移文件
├─Demo.Domain // 领域层,实现核心业务应用
├─Demo.Domain.Shared // 领域共享层,用于存放通用的值类型,枚举类型,可被其他微服务应用
├─Demo.EntityFrameworkCore // 数据访问层(属于基础设施层),提供通过efcore提供数据访问能力
│ └─DbContexts
└─DemoHost // 主机项目,用于应用寄宿,管理应用服务生命周期
└─Properties // 应用启动配置
- 启动项目
进入到 ./docker-compose/infrastr 目录,通过如下命令创建zookeeper和redis服务:
# 创建一个名称为silky_service_net的docker网络
docker network create silky_service_net
# 使用docker-compose创建zookeeper和redis服务
docker-compose -f docker-compose.zookeeper.yml -f docker-compose.redis.yml up -d
使用visual studio 或是 rider 打开 Demo.sln 解决方案,将 DemoHost 设置为启动项目,还原项目后,按F5启动项目。
项目启动后,通过浏览器打开地址 https://localhost:5001/index.html, 即可打开swagger在线文档地址:

构建模块化应用的模板Silky.Module.Template
如果开发者将所有的微服务应用统一开发、管理(将所有微服务应用存放在一个仓库中集中管理),可以使用Silky.Module.Template模板构建微服务应用。
- 安装 Silky.Module.Template 模板
dotnet new --install Silky.Module.Template::3.0.2
- 创建微服务应用
dotnet new silky.module --hosttype webhost -p:i --includeinfrastr --newsln -n Demo
Silky.Module.Template 模板参数:
| 短命令 | 长命令 | 说明 | 缺省值 |
|---|---|---|---|
| -r | --rpcToken | 设置rpctoken | ypjdYOzNd4FwENJiEARMLWwK0v7QUHPW |
| -rp | --rpcPort | 设置rpc端口 | 2200 |
| -re | --registrycentertype | 服务注册中心类型 | Zookeeper |
| -p:r | --registrycenterconnections | 服务注册中心链接地址 | 127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183;127.0.0.1:2184,127.0.0.1:2185,127.0.0.1:2186 |
| -p:re | --redisenable | 是否可用redis服务 | true |
| --redisconfiguration | redis服务配置 | 127.0.0.1:6379,defaultDatabase=0 | |
| -d | --dockersupport | 是否支持docker | true |
| -do | --dotnetenv | 设置运行开发环境 | Development |
| -in | --includeinfrastr | 是否包含基础服务编排文件 | true |
| -p:i | --includesln | 是否包括解决访问文件 | true |
| -p:d | --dockernetwork | 设置docker network | silky_service_net |
| -ho | --hosttype | 设置主机类型: webhost, generalhost ,websockethost, gateway | webhost |
| -ne | --newsln | 是否是一个新的解决方案 | false |
使用 Silky.Module.Template 模板创建的微服务应用的目录结构:
.
├─docker-compose // docker-compose编排文件
│ ├─Demo // Demo微服务应用服务编排
│ └─infrastr // 基础服务编排文件
│ └─sql
└─microservices // 各个微服务应用模块
└─Demo // Demo微服务应用
├─Demo.Application // 应用层
│ └─System
├─Demo.Application.Contracts // 应用接口层,用于定义服务,可被其他微服务应用引用
│ └─System
│ └─Dtos
├─Demo.Database.Migrations // 数据迁移项目(属于基础设施层),用于存放ef迁移文件
├─Demo.Domain // 领域层,实现核心业务应用
├─Demo.Domain.Shared // 领域共享层,用于存放通用的值类型,枚举类型,可被其他微服务应用
├─Demo.EntityFrameworkCore // 数据访问层(属于基础设施层),提供通过efcore提供数据访问能力
│ └─DbContexts
└─DemoHost // 主机项目,用于应用寄宿,管理应用服务生命周期
└─Properties // 应用启动配置
- 新增一个微服务应用模块
dotnet new silky.module --hosttype webhost -p:i -n Demo1
将新创建的微服务应用从 Demo1/microservices/Demo1 拷贝到 Demo/microservices/Demo1, Demo1/docker-compose/Demo1 拷贝到 Demo/docker-compose/Demo1,并将新模块的微服务应用添加到解决方案中。

- 调式
如果开发者需要同时启动调式多个微服务,需要更新rpc:port配置(rpc:port不能重复),并通过更新launchSettings.json更新应用服务启动的http服务地址。将启动项目设置为 多个启动项目,将 Demo1Host 和 DemoHost 设置为 启动。这样, 我们就可以同时调式 Demo1Host 和 DemoHost 这两个应用了。



开源地址
- github: https://github.com/liuhll/silky
- gitee: https://gitee.com/liuhll2/silky
在线文档
使用silky脚手架构建微服务应用的更多相关文章
- 通过silky框架在.net平台构建微服务应用
目录 必要前提 使用Web主机构建微服务应用 使用.NET通用主机构建微服务应用 构建具有websocket服务能力的微服务应用 构建Silky微服务网关 开源地址 在线文档 在线示例 必要前提 (必 ...
- SpringBoot 快速构建微服务体系 知识点总结
可以通过http://start.spring.io/构建一个SpringBoot的脚手架项目 一.微服务 1.SpringBoot是一个可使用Java构建微服务的微框架. 2.微服务就是要倡导大家尽 ...
- [译]Spring构建微服务
此文为译文,原文地址 介绍 本文通过一个使用Spring.Spring Boot和Spring Cloud的小例子来说明如何构建微服务系统. 我们可以通过数个微服务组合成一个大型系统. 我们可以想象下 ...
- 构建微服务:Spring boot
构建微服务:Spring boot 在上篇文章构建微服务:Spring boot 提高篇中简单介绍了一下spring data jpa的基础性使用,这篇文章将更加全面的介绍spring data jp ...
- 如何使用 Java 构建微服务?
[编者按]微服务背后的大理念是将大型.复杂且历时长久的应用在架构上设计为内聚的服务,这些服务能够随着时间的流逝而演化.本文主要介绍了利用 Java 生态系统构建微服务的多种方法,并分析了每种方法的利弊 ...
- 构建微服务-使用OAuth 2.0保护API接口
微服务操作模型 基于Spring Cloud和Netflix OSS 构建微服务-Part 1 基于Spring Cloud和Netflix OSS构建微服务,Part 2 在本文中,我们将使用OAu ...
- 基于Spring Cloud和Netflix OSS构建微服务,Part 2
在上一篇文章中,我们已使用Spring Cloud和Netflix OSS中的核心组件,如Eureka.Ribbon和Zuul,部分实现了操作模型(operations model),允许单独部署的微 ...
- 构建微服务(Building Microservices)-PDF 文档
闲时翻译了几篇基于Spring Cloud.Netflix OSS 构建微服务的英文文章,为方便分享交流,整理为PDF文档. PDF 文档目录: 目录 一.微服务操作模型... 3 1. 前提 ...
- Chris Richardson微服务翻译:构建微服务之微服务架构的进程通讯
Chris Richardson 微服务系列翻译全7篇链接: 微服务介绍 构建微服务之使用API网关 构建微服务之微服务架构的进程通讯(本文) 微服务架构中的服务发现 微服务之事件驱动的数据管理 微服 ...
随机推荐
- 使用Jmeter做接口测试(学生信息的6个接口)
使用Jmeter做接口测试,案例中涉及到接口有:获取学生信息.登录.添加学生信息.学生金币充值.获取所有学生信息.文件上传. 一.获取学生信息(get请求) 服务器名称或IP:输入被请求服务器的名称或 ...
- 使用Postman做接口测试(学生信息的6个接口)
使用postman做接口测试,案例中涉及到接口有:获取学生信息.登录.添加学生信息.学生金币充值.获取所有学生信息.文件上传. 一.获取学生信息(get请求) 请求方式选择:get 直接在访问地址栏中 ...
- 详细的vsftpd配置
环境:CentOS 5.0 操作系统一.安装:1.安装Vsftpd服务相关部件:[root@KcentOS5 ~]# yum install vsftpd*Dependencies Resolved= ...
- JAVA-java内存分配
二.java-class的内存分配 三.JAVA string类特别之处 String 通过构造方法创建是在堆内存中, 通过直接赋值对象是在方法区的常量里 四.字符串做拼接 非常耗时和浪费内存的原因 ...
- CF700E-Cool Slogans【SAM,线段树合并,dp】
正题 题目链接:https://www.luogu.com.cn/problem/CF700E 题目大意 给出一个字符串\(S\),求一个最大的\(k\)使得存在\(k\)个字符串其中\(s_1\)是 ...
- 微信公众号开发之H5页面跳转到指定的小程序
前言: 最近公司有一个这样的需要,需要从我们在现有的公众号H5页面中加一个跳转到第三方小程序的按钮.之前只知道小程序之间是可以相互跳转的,今天查阅了下微信开发文档原来现在H5网页也支持小程序之间的跳转 ...
- 题解 「BZOJ4919 Lydsy1706月赛」大根堆
题目传送门 题目大意 给出一个 \(n\) 个点的树,每个点有权值,从中选出一些点,使得满足大根堆的性质.(即一个点的祖先节点如果选了那么该点的祖先节点的权值一定需要大于该点权值) 问能选出来的大根堆 ...
- 洛谷4072 SDOI2016征途 (斜率优化+dp)
首先根据题目中给的要求,推一下方差的柿子. \[v\times m^2 = m\times \sum x^2 - 2 \times sum \times sum +sum*sum \] 所以\(ans ...
- 小白自制Linux开发板 番外篇 一 modprobe加载驱动问题(转载整理)
使用modprobe加载驱动 转载地址:https://blog.csdn.net/qq_39101111/article/details/78773362 前面我们提到,modprobe并不需要指定 ...
- 2020.4.6--UCF Local Programming Contest 2017的正式赛
Problem A : Electric Bill 题目大意:进行电量分级制收费,1000kwh及以下一档收费,1000kwh以上按另一档收费,给出每个人的电量总额,问每人应支付多少钱. 思路:基础i ...