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 ...
随机推荐
- Gitlab(2)- centos7.x 下安装社区版 Gitlab 以及它的配置管理
前置准备:虚拟机安装以及配置相关 包含安装 centos7.8 虚拟机.设置静态 ip 等 https://www.cnblogs.com/poloyy/category/1703784.html 注 ...
- DevExpress Silverlight DXChart特效总结
1. 主题修改 引用 xmlns:core=http://schemas.devexpress.com/winfx/2008/xaml/core 在Grid中添加core:ThemeManager ...
- Java入门准备:Java开发环境的安装与卸载
Java的三大版本 JavaSE:标准版 JavaME:嵌入式开发 JavaEE:企业级开发 JDK(Java Development Kit):Java开发者工具包 JRE(Java Runtime ...
- [源码解析] 深度学习分布式训练框架 horovod (21) --- 之如何恢复训练
[源码解析] 深度学习分布式训练框架 horovod (21) --- 之如何恢复训练 目录 [源码解析] 深度学习分布式训练框架 horovod (21) --- 之如何恢复训练 0x00 摘要 0 ...
- C++打字小游戏
从@小蔡编程 那里获得的灵感,原文地址:https://www.cnblogs.com/xiaocaibiancheng/p/15158997.html 那篇文章是说python写打字游戏的,本文就用 ...
- [Python]爬虫获取知乎某个问题下所有图片并去除水印
获取URL 进入某个知乎问题的主页下,按F12打开开发者工具后查看network面板. network面板可以查看页面向服务器请求的资源.资源的大小.加载资源花费的时间以及哪些资源加载失败等信息.还可 ...
- 【Python学习】1.数据类型
一.整数 可以使用十进制和十六进制来表示整数.比如:-1000和0x1e3f2d 二.浮点数 直接表示浮点数,比如:2.443或者1.2e5 1.2e-10等 整数和浮点数在计算机内部存储的方式是不同 ...
- PHP中比较数组的时候发生了什么?
首先还是从代码来看,我们通过比较运算符号来对两个数组进行比较: var_dump([1, 2] == [2, 1]); // false var_dump([1, 2, 3] > [3, 2, ...
- nginx环境下提交表单一直301
之前网站一直正常的,现在提交表单一直301 原因: 前几天把网站http升为https协议,需要去掉连接 // 前内容 把 <form method ="post" acti ...
- Docker系列(6)- 常用命令(2) | 镜像命令
准备工作 知道查看官方文档,官方文档描述的很详细,并且每一种类型.每一个命令的选项都有例子 会使用docker --help查看 镜像命令 docker images 查看所有本地主机上的镜像 [ro ...