silky微服务快速开始
项目介绍
Silky框架旨在帮助开发者在.net平台下,通过简单代码和配置快速构建一个微服务开发框架。
Silky 通过 .net core的主机来托管微服务应用。通过 Asp.Net Core 提供的http服务接受外界请求,转发到后端的微服务应用,服务内部通过DotNetty实现的SilkyRpc框架进行通信。
框架特性
- 面向接口代理的高性能RPC调用
- 服务自动注册和发现,支持Zookeeper、Consul、Nacos作为服务注册中心
- 智能容错和负载均衡,强大的服务治理能力
- 支持缓冲拦截
- 高度可扩展能力
- 支持分布式事务
- 流量监控
- 通过SkyApm进行链路跟踪
- 通过Swagger生成在线API文档
快速开始
1. 构建主机
新建一个web或是控制台项目,通过 nuget安装Silky.Agent.Host包。
PM> Install-Package Silky.Agent.Host
在Main方法中通过HostBuilder构建主机。
public class Program
{
public static Task Main(string[] args)
{
return CreateHostBuilder(args).Build().RunAsync();
}
private static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureSilkyWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>();});
}
在Startup中配置服务依赖注入,以及配置中间件。
public void ConfigureServices(IServiceCollection services)
{
services.AddSilkyHttpCore()
.AddSwaggerDocuments()
.AddRouting();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseSwaggerDocuments();
}
// 配置路由中间件
app.UseRouting();
app.UseEndpoints(endpoints =>
{
// 配置SilkyRpc服务路由
endpoints.MapSilkyRpcServices();
});
}
2. 更新配置
在配置文件中指定服务注册中心的类型和服务注册中心配置属性以及SilkyRpc框架的配置。如果使用使用分布式事务必须要使用redis作为分布式缓存。
其中,在同一个微服务集群中,Rpc:Token的值必须相同。Rpc:Port的缺省值是2200,Rpc:Host的缺省值为0.0.0.0。
在appsettings.json中新增如下配置:
{
"RegistryCenter": {
"Type": "Zookeeper",
"ConnectionStrings": "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"
},
"DistributedCache": {
"Redis": {
"IsEnabled": true,
"Configuration": "127.0.0.1:6379,defaultDatabase=0"
}
},
"Rpc": {
"Token": "ypjdYOzNd4FwENJiEARMLWwK0v7QUHPW",
"Port": 2200
}
}
3. 定义一个服务接口
一般地,我们需要将服务接口单独定义在一个项目中,方便被服务消费者引用。
创建一个接口,并通过[ServiceRoute]特性标识为该接口是一个应用服务。
[ServiceRoute]
public interface IGreetingAppService
{
Task<string> Get();
}
4. 提供者实现服务
创建一个类,通过继承服务接口即可实现接口定义的方法。
public class GreetingAppService : IGreetingAppService
{
public Task<string> Get()
{
return Task.FromResult("Hello World");
}
}
5. 消费者通过RPC远程调用服务
其他微服务应用只需要通过引用应用服务接口项目,通过接口代理与服务提供者通过SilkyRpc框架进行通信。
6. Swagger在线文档
运行程序后,打开浏览器,输入http://127.0.0.1:5000/index.html 即可查看swagger在线文档,并且通过api进行调试。

通过项目模板快速创建应用
silky提供了两个项目模板可以快速的创建应用,开发者可以根据需要选择合适的项目模板来创建应用。
# 以模块的方式创建微服务应用,适用于将所有的应用放在同一个仓库
> dotnet new --install Silky.Module.Template::3.0.0.2
# 以独立应用的方式创建微服务应用,将每个微服务应用单独存放一个仓库
> dotnet new --install Silky.App.Template::3.0.0.2
使用项目模板创建微服务应用。
dotnet new -n silky.app --newsln -n Demo
silky微服务快速开始的更多相关文章
- silky微服务简介
代理主机 silky微服务定义了三种类型的代理主机,开发者可以根据需要选择合适的silky代理主机托管微服务应用.代理主机定义了一个Startup模块,该模块给出了使用该种类型主机所必须依赖的模块. ...
- silky微服务框架服务注册中心介绍
目录 服务注册中心简介 服务元数据 主机名称(hostName) 服务列表(services) 终结点 时间戳 使用Zookeeper作为服务注册中心 使用Nacos作为服务注册中心 使用Consul ...
- 【SFA官方翻译】使用 Kubernetes、Spring Boot 2.0 和 Docker 的微服务快速指南
[SFA官方翻译]使用 Kubernetes.Spring Boot 2.0 和 Docker 的微服务快速指南 原创: Darren Luo SpringForAll社区 今天 原文链接:https ...
- spring cloud微服务快速教程之(七) Spring Cloud Alibaba--nacos(一)、服务注册发现
0.前言 什么是Spring Cloud Alibaba? Spring Cloud Alibaba 是阿里开源的,致力于提供微服务开发的一站式解决方案.此项目包含开发分布式应用微服务的必需组件,方便 ...
- 一个轻量级的.Net Core微服务快速开发的轮子
前言 Adnc是一个轻量级的.Net Core微服务快速开发框架,同时也可以应用于单体架构系统的开发.框架基于JWT认证授权.集成了一系列微服务配套组件,代码简洁.易上手.学习成本低.开箱即用 ...
- silky微服务业务主机简介
目录 主机的概念 通用主机 web主机 业务主机类型 使用web主机构建微服务应用 使用通用主机构建微服务应用 构建具有websocket能力的微服务应用 构建网关 开源地址 在线文档 主机的概念 s ...
- silky微服务框架的服务治理介绍
目录 服务治理的概念 服务注册与发现 负载均衡 超时 故障转移(失败重试) 熔断保护(断路器) 限流 RPC限流 HTTP限流 1. 添加配置 2. 注册服务 3.启用 AspNetCoreRateL ...
- Silky微服务框架之服务引擎
构建服务引擎 在注册Silky微服务应用一节中,我们了解到在ConfigureServices阶段,通过IServiceCollection的扩展方法AddSilkyServices<T> ...
- 基于SpringBoot-Dubbo的微服务快速开发框架
简介: 基于Dubbo的分布式/微服务基础框架,为前端提供脚手架开发服务,结合前一篇--Web AP快速开发基础框架,可快速上手基于Dubbo的分布式服务开发,项目代码: https://github ...
随机推荐
- MySQL存储结构及SQL分类
MySQL目录结构 bin -- mysql执行程序 docs -- 文档 share - 各国编码信息 data -- 存放mysql 数据文件 * 每个数据库 创建一个同名文件夹,.frm 存放t ...
- 数据库CPU 100%处理记录
问题描述 2020年7月13日一大早收到告警,测试环境数据库CPU告警. 登录aws查看监控如下图 问题分析 出现这种cpu 100%的问题,都是因为sql性能问题导致的, 主要表现于 cpu 消 ...
- 我的第一个npm包:wechat-menu-editor 基于Vue的微信自定义菜单编辑器
wechat-menu-editor 微信自定义菜单编辑器 前言 在做微信公众号相关开发时,基本上会去开发的功能就是微信自定义菜单设置的功能,本着不重复造轮子的原则,于是基于Vue封装的一个微信自定义 ...
- K8S最小硬件配置
- etcd学习(9)-etcd中的存储实现
etcd中的存储实现 前言 V3和V2版本的对比 MVCC treeIndex 原理 MVCC 更新 key MVCC 查询 key MVCC 删除 key 压缩 周期性压缩 版本号压缩 boltdb ...
- Spring Cloud Zuul 学习+实践
首先有必要了解一下什么是Zuul,它和Spring Cloud有什么关系. Zuul在Spring Cloud中承担着网关的职责,可以理解为客户端和服务端交互中的唯一通道.所有的客户端请求都会首先发送 ...
- 未能找到源类型“DbSet<T>”的查询模式的实现。未找到“Select”
使用EF6.0的模型优先模式进行开发,遇到了报错,如下图 后来发现是没引用using System.Linq; 引用后就不报错了
- mysql远程连接以及错误解决&命令行基本操作
现在大家的程序服务基本都是部署在云服务器上,今天我分享记录一下:使用mysql数据库过程中比较常见操作和遇到的问题 环境:lunix 系统(阿里云服务器,华为云服务器,腾讯云等均适用) + mysql ...
- view+element+java登陆验证码
一.前端: 1.页面标签: <el-row :gutter="20"> <el-col :span="24"> <el-input ...
- TypeScript 中装饰器的理解?应用场景?
一.是什么 装饰器是一种特殊类型的声明,它能够被附加到类声明,方法, 访问符,属性或参数上 是一种在不改变原类和使用继承的情况下,动态地扩展对象功能 同样的,本质也不是什么高大上的结构,就是一个普通的 ...