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 ...
随机推荐
- 20210719 noip20
考场 后两题是原题,教练说不用写了(ycx 不讲武德) T1 先手模了 \(n\le5\) 的情况,尝试找规律失败.那就只能 DP 了,最终没搞出来. 记忆化搜索打了 \(n\le20\) 的表,交了 ...
- Vs code自动生成Doxygen格式注释
前言 程序中注释的规范和统一性的重要性不言而喻,本文就推荐一种在用vscode编写代码时自动化生成标准化注释格式的方法,关于Doxygen规范及其使用可查看博文 代码注释规范之Doxygen. ...
- Linux常用命令 - less命令详解
21篇测试必备的Linux常用命令,每天敲一篇,每次敲三遍,每月一循环,全都可记住!! https://www.cnblogs.com/poloyy/category/1672457.html 查看文 ...
- KMP算法中的几个疑问
KMP算法next数组求解实现 首先我们通过应用场景将KMP算法中用到的名词做一个说明: 在一个字符串(string1)中查询是否存在另一个字符串(string2). 在字符串匹配算法中,我们通常将字 ...
- window server 2008 系统加固
1.更改管理员账号: 开始->运行->compmgmt.msc(计算机管理)->本地用户和组->用户,右击Administrator账户并选择"重命名",并 ...
- NIO.2中Path,Paths,Files类的使用
Java NIO Java NIO概述 Java NIO(New IO(新io),Non-Blocking IO(非阻塞的io))是从Java 1.4版本开始引入的一套新的IO API,可以替代标准的 ...
- 集合Collection ----List集合
Collection集合体系的特点: set系列集合:添加的元素是 无序,不重复,无索引的 ----HashSet: 无序,不重复,无索引 ----LinkedHashSet: 有序,不重复,无索引 ...
- 执行:vim /etc/profile,提示:Command 'vim' not found, but can be installed with:
root@uni-virtual-machine:/# vim /etc/profile Command 'vim' not found, but can be installed with: apt ...
- javascript 责任链模式 Chain of Responsibility
* 可拆分的责任链节点 // 可拆分的责任链节点 // Chain.prototype.setNextSuccessor 指定在链条中的下一个节点 // Chain.prototype.passReq ...
- modern php enable zend opcache
字节码缓存能存储预先编译好的php代码 * 如果是自己编译PHP ./configure --enable-opcache 编译好后 php.ini zend_extension=opcache.so ...