3.1 服务提供者ViperService概述

3.1.1 源码结构#

MySQL 数据库#

运行数据库脚本创建数据库

1、Viper\database\Viper20210201_01.sql

3.1.2 控制台程序#

1. 取名 ViperService#

2. 添加Nuget包#

dotnet add package Anno.Rpc.Server --version 1.7.0.1
dotnet add package Anno.EngineData --version 1.7.0.2
开发者可以根据喜好选择底层RPC通讯中间件

  目前支持两种ThriftGrpc,推荐Thrift

   dotnet add package Anno.Rpc.Server --version 1.7.0.1 为Thrift方式

   dotnet add package Anno.Rpc.ClientGrpc --version 1.7.0.1 为Grpc方式

3. 配置文件#

Viper\ViperService\bin\Debug\net6.0\Anno.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<!--0,0 第一位是 工作站,第二位数据中心
(所有的 AnnoService 的 两位数不能重复例如不能存在【1,2】【1,2】)
可以存在【1,2】【2,1】
-->
<IdWorker>0,0</IdWorker>
<!--App名称-->
<AppName>ViperService-01</AppName>
<!--监听端口-->
<Port>7011</Port>
<!--权重-->
<Weight>1</Weight>
<!--功能 非Anno.Plugs 加入方式-->
<FuncName></FuncName>
<!--忽略的功能 Trace,Logic-->
<IgnoreFuncName></IgnoreFuncName>
<!--超时时间毫秒-->
<TimeOut>20000</TimeOut>
<!--注册到的目标-->
<Ts Ip="127.0.0.1" Port="7010"/>
<IocDll>
<!-- IOC 仓储--><!--
<Assembly>Anno.Repository</Assembly>
--><!-- 领域--><!--
<Assembly>Anno.Domain</Assembly>
--><!-- 查询服务--><!--
<Assembly>Anno.QueryServices</Assembly>
--><!--事件Handler--><!--
<Assembly>Anno.Command.Handler</Assembly>-->
</IocDll>
<appSettings>
<!-- 数据库连接字符串 Mysql-->
<add key="ConnStr"
value="server=127.0.0.1;database=viper;uid=bif;pwd=123456;SslMode=None;"/>
<!--
redisConn Redis 连接字符串 127.0.0.1:6379
,abortConnect=false,allowAdmin =true,keepAlive=180
redisPrefix Key 前缀 Anno:
redisExpiryDate Key 有效期 单位(分钟) 20
redisSwitch 是否开启数据库 false 不开启 false
<add key="redisConn" value=""/>
<add key="redisPrefix" value="SW:"/>
<add key="redisExpiryDate" value="20"/>
<add key="redisSwitch" value="false"/>
-->
</appSettings>
</configuration>
提示

一般情况下只用修改 下面两行配置

<!--注册到的目标-->
<Ts Ip="127.0.0.1" Port="7010"/>
<!-- 数据库连接字符串 Mysql-->
<add key="ConnStr" value="server=xxxx;"/>

4. 程序文件#

正常情况下只需要以下几行代码就可以启动服务宿主程序

using System;
using System.Linq;
using System.Reflection;
using System.Threading;
using Anno.Const.Attribute;
using Anno.Loader;
using Anno.Log;
using Autofac;
namespace ViperService
{
using Anno.EngineData;
using Anno.Rpc.Server;
using System.Collections.Generic;
using Anno.Rpc.Storage;
class Program
{
static void Main(string[] args)
{
if (args.Contains("-help"))
{
Log.ConsoleWriteLine(@"
启动参数:
-p 6659 设置启动端口
-xt 200 设置服务最大线程数
-t 20000 设置超时时间(单位毫秒)
-w 1 设置权重
-h 192.168.0.2 设置服务在注册中心的地址
-tr false 设置调用链追踪是否启用");
return;
}
Bootstrap.StartUp(args, () =>
{
//Anno.Const.SettingService.TraceOnOff = true;
var autofac = IocLoader.GetAutoFacContainerBuilder();
autofac.RegisterType(typeof(RpcConnectorImpl))
.As(typeof(IRpcConnector)).SingleInstance();
});
}
}
}
服务宿主程序可以根据需要开发者自己选择依赖注入中间件

  目前支持两种AutofacDependencyInjection,推荐Autofac

  IocLoader.GetAutoFacContainerBuilder() 为Autofac方式

  IocLoader.GetServiceDescriptors() 为DependencyInjection方式 .netcore 自带的依赖注入中间件

需要注意的是使用IocLoader.GetServiceDescriptors 需要在Bootstrap.StartUp方法中使用第二个参数指定IocType.DependencyInjection

5. 接口文档写入 注册中心ViperCenter#

这段代码直接黏贴就可以不用修改
Bootstrap.StartUp(args, () =>//服务配置文件读取完成后回调(服务未启动)
{
//Anno.Const.SettingService.TraceOnOff = true;
/*
* 功能插件选择是Thrift还是 Grpc
* Install-Package Anno.Rpc.Client -Version 1.0.3.3 Thrift
* Install-Package Anno.Rpc.ServerGrpc -Version 1.0.3.3 Grpc
* 此处为 Thrift
*/
var autofac = IocLoader.GetAutoFacContainerBuilder();
autofac.RegisterType(typeof(RpcConnectorImpl)).As(typeof(IRpcConnector)).SingleInstance();
}
, () =>//服务启动后的回调方法
{
/**
* 服务Api文档写入注册中心
*/
Bootstrap.ApiDoc();
});

6 运行服务宿主程序#

说明
  •    1.看到上图画面说明已经运行成功,开始往注册中心注册

  •    2.因为我没有启动注册中心,所以为出现注册失败的提示。

  •    3.注册失败会每隔一秒重试一次,重试60(默认60可以自行修改)仍失败则不再注册。