微服务给我们的第一映像是架构复杂,部署起来麻烦。其实并非如此,不同的架构选型必然带来不同的优点和缺点,没有一劳永逸的方法,配置简单是因为适用的场景面窄。在项目或产品的实际开发中往往随着时间的推进需要实现不同场景的需求,导致功能扩展,致使架构越来越复杂。
如果我们之前的代码没有使用微服务,现在随着产品要求商务要求等需要使用微服务怎么办?架构迁移是一件耗时费力的事情,如果能有一套简洁的微服务方案,能够无需对原始代码进行修改即可进行微服务迁移就好了。
Sers就是这样的一套方案。Sers微服务是一套中心化的微服务架构,部署和接入非常简单。
Sers提供了3种c#接入的方式(用户亦可自定义接入代码),Serslot是对net core web api的原生支持。无需修改原有web api代码,修改3处地方(仅一处代码)即可无缝接入。查看源码
1.添加nuget包引用
编辑csproj文件,添加如下代码,通过nuget安装Serslot
<ItemGroup>
<PackageReference Include="Sers.Serslot" Version="2.1.7" />
</ItemGroup>
2.修改项目启动代码
编辑Program.cs文件,按照如下添加两行代码
// Program.cs
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;
using Vit.Extensions; //----添加代码1
namespace Did.Serslot.HelloWorld
{
public class Program
{
public static void Main(string[] args)
{
CreateWebHostBuilder(args).Build().Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseSerslot() //----添加代码2
.UseStartup<Startup>();
}
}
3.运行服务中心
服务中心使用net core编写,请先安装netcore2.1运行环境。
在windows下直接下载安装包 进行安装即可。
下载服务中心程序,解压,双击批处理文件“SersPublish\netcoreapp2.1\01 ServiceCenter.bat”即可。
控制台有如下类似输出则代表服务中心启动成功。
[INFO][14:57:33.9310][WebHost]will listening on: http://*:4580
[INFO][14:57:33.9323][WebHost]wwwroot : ......\wwwroot
Hosting environment: Production
Content root path: ......\Sers2.1.1.250\ServiceCenter
Now listening on: http://[::]:4580
Application started. Press Ctrl+C to shut down.
4.运行程序
运行程序,在控制台会看到如下输出则代表服务接入成功
[INFO][10:18:23.8879][ServiceStation] init...
[INFO][10:18:23.9804][Serslot] Mode: Async
[INFO][10:18:23.9932][ApiLoader] LoadApi,assembly:[Did.Serslot.HelloWorld, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]
[INFO][10:18:24.0920][ServiceStation] starting ...
[INFO][10:18:24.0934][CL] Connect - trying...
[INFO][10:18:24.3095][CL.DeliveryClient] Socket.Iocp,connecting... host:127.0.0.1 port:4501
[INFO][10:18:24.3422][CL.DeliveryClient] Socket.Iocp,connected.
[INFO][10:18:24.3470][CL.OrganizeClient] Authentication - sending SecretKey...
[INFO][10:18:24.4050][CL.OrganizeClient] Authentication - succeed.
[INFO][10:18:24.4061][CL] Connect - succeed
[INFO][10:18:24.4079][ServiceStation] regist serviceStation to ServiceCenter...
[INFO][10:18:24.7388][ServiceStation] regist - succeed
Press Ctrl+C to shut down.
在服务中心的控制台看到如下输出
[INFO][10:18:24.3921][CL] OnConnected,connTag:
[INFO][10:18:24.7118][ApiCenterService]Regist serviceStation,stationName:
[INFO][10:18:24.7129][ApiCenterService]Add ApiNode,serviceKey:/api/Values/*_DELETE
[INFO][10:18:24.7155][ApiCenterService]Add ApiNode,serviceKey:/api/Values_GET
[INFO][10:18:24.7161][ApiCenterService]Add ApiNode,serviceKey:/api/Values/*_GET
[INFO][10:18:24.7165][ApiCenterService]Add ApiNode,serviceKey:/api/Values_POST
[INFO][10:18:24.7169][ApiCenterService]Add ApiNode,serviceKey:/api/Values/*_PUT
打开地址 http://localhost:4580/api/Values,得到如下返回:
["value1","value2"]
说明我们的api注册到服务中心,并被成功调用了。