- Notifications
You must be signed in to change notification settings - Fork176
Viper 是一个基于Anno微服务引擎开发的Dashboard示例项目。Anno 底层通讯采用 grpc、thrift。自带服务发现、调用链追踪、Cron 调度、限流、事件总线等等
License
NotificationsYou must be signed in to change notification settings
duyanming/Viper
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
Viper 是一个基于Anno微服务引擎开发的Dashboard项目、示例项目。Anno 底层通讯可选用grpc、thrift。自带服务发现、调用链追踪、Cron 调度、限流、事件总线等等
账号:anno密码:123456
Anno 是一个分布式开发框架,支持 .net core3.1 、.net frameworker4.5 、 java
运行数据库脚本创建数据库1、Viper\database\viper20210617_01.sql2、修改viperService 数据库连接字符串Viper\ViperService\bin\Debug\net6.0\Anno.config
<appSettings><!-- 数据库连接字符串 Mysql--> <addkey="ConnStr"value="server=127.0.0.1;database=viper;uid=bif;pwd=123456;SslMode=None;"/></appSettings>
第一步:启动注册中心Viper\ViperCenter\bin\Debug\net6.0\Anno.config
<?xml version="1.0" encoding="utf-8"?><configuration><!--ViperCenter 端口--> <Port>7010</Port><!--ViperCenter 超时时间--> <TimeOut>120000</TimeOut> <Servers><!--dc 注册到注册中心的 服务节点 (下面的内容是ViperService 启动后自动写入的内容)--> <dcname="Anno.Plugs.LogicService,Anno.Plugs.TraceService,Anno.Plugs.ViperService"nickname="ViperService-01"ip="100.100.100.9"port="7011"timeout="20000"weight="1" /> </Servers></configuration>
Viper\ViperCenter\bin\Debug\net6.0运行命令 dotnet ViperCenter.dll看到下图 说明运行成功
第二步:启动 ViperServiceViper\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><!--注册到的目标--> <TsIp="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--> <addkey="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>
一般情况下只用修改
<!--注册到的目标--> <TsIp="127.0.0.1"Port="7010"/><!-- 数据库连接字符串 Mysql--> <addkey="ConnStr"value="server=127.0.0.1;database=viper;uid=bif;pwd=123456;SslMode=None;"/>
ViperService 可以和 ViperCenter 不在同一台电脑,也可以运行多个server 也可以负载均衡,高级用法随后介绍进入项目文件夹 Viper\ViperService\bin\Debug\net6.0 运行命令 dotnet ViperService.dll看到下图 说明 ViperService 成功运行 并且已经注册到 注册中心(ViperCenter)运行成功
启动 Viper.GetWay
第三步:调用链追踪Viper\Viper\appsettings.json
{"Target": {"AppName":"ApiGateway","IpAddress":"127.0.0.1","Port":7010,"TraceOnOff":true },"Limit": {"Enable":true,"TagLimits": [ {"channel":"*","router":"*","timeSpan":"1","rps":100,"limitSize":100 } ],"DefaultIpLimit": {"timeSpan":1,"rps":200,"limitSize":200 },"IpLimits": [ {"ipMatch":"0.0.0.1","timeSpan":1,"rps":100,"limitSize":100 }, {"ipMatch":"192.168.0.10 - 192.168.10.20","timeSpan":1,"rps":100,"limitSize":100 } ],"White": ["0.0.0.1","192.168.1.2","192.168.2.18" ],"Black": ["0.0.0.2","192.168.3.18" ] }}
调用链详情
第四步:集群路由信息
调试邮件接口成功
第五步:服务性能监控
Eventbus Support InMemory and Rabbitmq
//指定EventHandler的 所在程序集varfuncs=Anno.Const.Assemblys.Dic.Values.ToList(); #region RabbitMQEventBus//消费失败通知EventBusSetting.Default.RabbitConfiguration=newRabbitConfiguration(){HostName="192.168.100.173",VirtualHost="dev",UserName="dev",Password="dev",Port=5672};RabbitMQEventBus.Instance.ErrorNotice+=(stringexchange,stringroutingKey,Exceptionexception,stringbody)=>{Log.Fatal(new{exchange,routingKey,exception,body},typeof(RabbitMQEventBus));};RabbitMQEventBus.Instance.SubscribeAll(funcs); #endregion #region InMemory EventBusEventBus.Instance.ErrorNotice+=(stringexchange,stringroutingKey,Exceptionexception,stringbody)=>{Log.Fatal(new{exchange,routingKey,exception,body},typeof(EventBus));};EventBus.Instance.SubscribeAll(funcs);
usingAnno.EventBus;namespaceEvents{publicclassFirstMessageEvent:EventData{publicstringMessage{get;set;}}}
namespaceAnno.Plugs.SamsundotService.EventHandler{usingAnno.EventBus;usingEvents;classFirstMessageEventHandler:IEventHandler<FirstMessageEvent>{publicvoidHandler(FirstMessageEvententity){Log.Log.Info(new{Plugs="Samsundot",Entity=entity},typeof(FirstMessageEventHandler));}}}
namespaceAnno.Plugs.YYTestService.EventHandler{usingAnno.EventBus;usingEvents;classFirstMessageEventHandler:IEventHandler<FirstMessageEvent>{publicvoidHandler(FirstMessageEvententity){Log.Log.Info(new{Plugs="YYTest",Entity=entity},typeof(FirstMessageEventHandler));}}/// <summary>/// 异常消费演示,测试 消费失败通知/// </summary>classFirstMessageExceptionEventHandler:IEventHandler<FirstMessageEvent>{publicvoidHandler(FirstMessageEvententity){Log.Log.Info(new{Plugs="YYTest",Handle="FirstMessageExceptionEventHandler",Entity=entity},typeof(FirstMessageEventHandler));thrownewException("异常消费演示,测试 消费失败通知 From FirstMessageExceptionEventHandler!");}}}
Install-Package Anno.EngineData.Cache
usingSystem;usingSystem.Collections.Generic;usingSystem.Text;usingAnno.EngineData;usingAnno.EngineData.Cache;namespaceAnno.Plugs.CacheRateLimitService{publicclassCacheModule:BaseModule{/* 参数1:缓存长度 参数2:缓存存活时间 参数3:缓存存活时间是否滑动 */[CacheLRU(5,6,true)]publicActionResultCache(stringmsg){Console.WriteLine(msg);returnnewActionResult(true,null,null,msg);}}}
Install-Package Anno.EngineData.RateLimit
usingSystem;usingSystem.Collections.Generic;usingSystem.Text;usingAnno.EngineData;usingAnno.RateLimit;namespaceAnno.Plugs.CacheRateLimitService{publicclassLimitModule:BaseModule{/* 参数1:限流算法是令牌桶还是漏桶 参数2:限流时间片段单位秒 参数3:单位时间可以通过的请求个数 参数4:桶容量 */[EngineData.Limit.RateLimit(LimitingType.TokenBucket,1,5,5)]publicActionResultLimit(stringmsg){Console.WriteLine(msg);returnnewActionResult(true,null,null,msg);}}}
#dotnetdotnet publish "E:\gitProject\Anno\DCS\AppCenter\AppCenter.csproj" -c Release -r linux-x64 -o "E:\gitProject\Anno\DCS\AppCenter\bin"
#配置文件说明
{"Target": {"AppName":"traceWeb",--服务名称"IpAddress":"127.0.0.1",--注册中心地址"Port":6660,--注册中心端口"TraceOnOff":true--启用调用链追踪 },"Limit": {--限流"Enable":true,--是否启用限流"TagLimits": [--标签限流 {"channel":"*",--管道"router":"*",--路由"timeSpan":"10",--时间片单位秒"rps":1,--时间片内的 有效请求个数"limitSize":2--漏桶容量大小 做缓冲用 } ],"DefaultIpLimit": {--默认IP限流策略"timeSpan":1,"rps":20,"limitSize":200 },"IpLimits": [--IP限流策略(ipMatch参考IPAddressRange) {"ipMatch":"0.0.0.1","timeSpan":1,"rps":100,"limitSize":100 }, {"ipMatch":"192.168.0.10 - 192.168.10.20","timeSpan":1,"rps":100,"limitSize":100 } ],"White": [--白名单"0.0.0.1","192.168.1.2","192.168.2.18" ],"Black": [--黑名单"0.0.0.2","192.168.3.18" ] }}
About
Viper 是一个基于Anno微服务引擎开发的Dashboard示例项目。Anno 底层通讯采用 grpc、thrift。自带服务发现、调用链追踪、Cron 调度、限流、事件总线等等
Topics
Resources
License
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Releases
No releases published
Packages0
No packages published
Contributors3
Uh oh!
There was an error while loading.Please reload this page.