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在线文档

运行程序后,打开浏览器,输入//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

开源地址

//github.com/liuhll/silky