項目介紹
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