silky微服務快速開始

Silky發表於2021-10-20

專案介紹

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進行除錯。

swagger

通過專案模板快速建立應用

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

開源地址

https://github.com/liuhll/silky

相關文章