Zeus,一个可以快速使用微服务组件
去年(上周)一直准备着做一个分布式微服务的组件,可以让使用者用最简单的方式引入,只需要使用简单的注解就能够使用。
用一点一点的空闲时间终于堆出来一个暂时可用的zeus-1.0版本。
Zeus,意为宙斯,奥林匹斯十二主神之首,Zeus目前既定的主要功能是服务发现,负载均衡,服务调用,API监控,配置中心,服务治理,服务容错。
目前完成的功能有服务注册,服务发现,API监控以及RPC调用。
Zeus的使用方式非常简单,你只需要在你的项目中引入jar包,或者maven地址就可以直接使用了,maven地址之后会用GitHub仓库的方式来分享出来。
Zeus项目地址:
https://github.com/CasterWx/Zeus
Zeus-Jar包下载地址:
https://github.com/CasterWx/Zeus/releases
(希望可以帮忙推广一下,这个项目对我很重要)
Rpc远程调用
存在一个server-1,地址为localhost:8080,还存在一个server-2,地址为localhost:8090。
server-1中有一个方法,假如它的作用是查询数据库返回用户信息,我们就可以给这个service类加上@RpcService(需要引入zeus-rpc.jar)方法来启动远程调用。
在server-2中如果我们想要调用server-1的doHello方法获取用户信息,就可以创建一个简单的RpcClient来调用。
此时访问这个/hello接口,可以得到远程接口返回的json结果。
{"code":0,"data":["user-1","user-2","user-3"],"requestId":"1"}
RpcRequest中参数为消息ID,实例类,方法,参数类型列表,参数值列表。
服务注册
引入zeus-client(client.jar)模块,在项目中添加@ZeusRegistry注解即可。
@ZeusRegistry注解有四个参数。
- registryName :命名空间(集群管理)
- zkAddr :zookeeper地址
- serverName :服务名称
- serverAddr :服务注册地址
目前使用zookeeper来做注册中心,是因为zookeeper本身比较强大,后期等到项目中netty模块优化传输之后会去掉zookeeper。
服务发现
服务发现目前开放了两个接口,一个是获取所有集群,另一个是获取指定集群下的所有服务。
使用上面的服务注册标签@ZeusRegistry注册了你的服务之后,就可以调用服务中心的 /v1/node 接口来发现服务了。
Zeus-Server默认使用了5454端口,调用接口分别如下。
http://localhost:5454/v1/node/namespaces
requestMethod : Get
获取所有集群名。
{ "code":200, "message":"OK", "data":[ "user-center2","user-center1","user-center3" ] }
http://localhost:5454/v1/node/server?namespace=param
requestMethod : Get
获取指定集群下的所有服务节点信息。
response
{ "code":200, "message":"OK", "data":[{ "nameSpace":"user-center1", "serverName":"server-1", "data":"126", "path":"/registry/user-center1/server-1" }] }
API监控
为你的方法或是API添加@FlowMonitor(name)注释,你的该方法访问将会得到记录。
例如在之前rpc调用的接口上添加一个FlowMoniter就可以监控rpc的次数以及时间点了。
数据会暂时先放在guava缓存中,定量会使用异步的方式上传到zeus-server做报表处理,这一部分暂时还没有做。
还有很多功能正在开发中~
- Go/Python/Erlang编程语言对比分析及示例 基于RabbitMQ.Client组件实现RabbitMQ可复用的 ConnectionPool(连接池) 封装一个基于NLog+NLog.Mongo的日志记录工具类LogUtil 分享基于MemoryCache(内存缓存)的缓存工具类,C# B/S 、C/S项目均可以使用!
- 使用MicroService4Net 快速创建一个简单的微服务
- 使用Swift自定义一个供快速搭建的无限循环轮播图组件
- 有了 serverless,前端也可以快速开发一个 Puppeteer 网页截图服务
- 快速架设一个使用 SSH 的 Git 服务
- 由于另外一个程序或正在运行的服务可能正在使用网络地址转换组件
- 调用WCF不需要添加服务引用,使用一个WCFHelper类就可以
- 分享在Linux下使用OSGi.NET插件框架快速实现一个分布式服务集群的方法
- 快速架设一个使用 SSH 的 Git 服务
- jQuery 1.7 正式版已经可以下载使用。jQuery是一个JavaScript库,它简化了HTML文档遍历,事件处理,动画和为网络快速发展的Ajax交互。jQuery 1.7 版本加入了新的事件API .on() 和 .off(),提
- ios中的开发一些小工具(就是一个写UIView的自定义组件的脱离环境,可以重新使用)解耦
- 使用MicroService4Net 快速创建一个简单的微服务
- RequireComponent的使用: 当你添加的一个用了RequireComponent组件的脚本,需要的组件将会自动被添加到game object(游戏物体)。这个可以有效的避免组装错误
- 当使用dbeaver导出多个sql文件,怎么快速的把它合并成一个文件,可以针对多种不同的类型
- Adapter 如果客户需要使用某个类的服务,而这项服务是这个类用一个不同的接口提供的,那么,可以使用适配器模式为客户提供一个期望的接口
- 推荐android studio一个插件 使用butterknife注解框架时可以快速生成注解
- .Net服务组件(ServicedComponent)简介及其使用
- MyPage从Page派生,MyPage总有一个Label控件。以便以后从MyPage派生的页都可以直接使用Label?给个代码例子看看?
- .Net服务组件(ServicedComponent)简介及其使用
- 开发PHP扩展-提供一个可以被PHP使用的类