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端口,调用接口分别如下。
requestMethod : Get
获取所有集群名。
{
"code":200,
"message":"OK",
"data":[
"user-center2","user-center1","user-center3"
]
}
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做报表处理,这一部分暂时还没有做。
还有很多功能正在开发中~
Zeus,一个可以快速使用微服务组件的更多相关文章
- Re:从0开始的微服务架构--(二)快速快速体验微服务架构?--转
原文地址:https://mp.weixin.qq.com/s/QO1QDQWnjHZp8EvGDrxZvw 这是专题的第二篇文章,看看如何搭建一个简单模式的微服务架构. 记得好久之前看到一个大牛说过 ...
- Go语言micro之快速搭建微服务
背景 go-micro给我们提供了一个非常便捷的方式来快速搭建微服务,而且并不需要提前系统了解micro,下面用一个简单的示例来快速实现一个服务. 创建Proto文件 因为我们要做微服务,那么就一定有 ...
- 通过GeneXus如何快速构建微服务架构
概览 “微服务”是一个非常广泛的话题,在过去几年里,市面上存在着各种不同的定义. 虽然对这种架构方式没有一个非常精确的定义,但仍然有一些概念具有代表性. 微服务有着许多围绕业务能力.自动化部署.终端智 ...
- 在 Docker 上运行一个 RESTful 风格的微服务
tags: Microservice Restful Docker Author: Andy Ai Weibo:NinetyH GitHub: https://github.com/aiyanbo/d ...
- SpringCloudAlibaba 微服务组件 Nacos 之配置中心源码深度解析
大家好,这篇文章跟大家聊下 SpringCloudAlibaba 中的微服务组件 Nacos.Nacos 既能做注册中心,又能做配置中心,这篇文章主要来聊下做配置中心时 client 端的一些设计,主 ...
- 教你如何用Nginx搭建一个安全的、快速的微服务架构
今天我们要谈论微服务以及如何使用Nginx构建一个快速的.安全的网络系统.最后,我们将向您展示一个使用Fabric模式如何非常快速和轻松地构建一个微服务的demo. 在我们探讨Fabric模式之前,我 ...
- SpringBoot 快速构建微服务体系 知识点总结
可以通过http://start.spring.io/构建一个SpringBoot的脚手架项目 一.微服务 1.SpringBoot是一个可使用Java构建微服务的微框架. 2.微服务就是要倡导大家尽 ...
- 利用SpringCloud搭建一个最简单的微服务框架
http://blog.csdn.net/caicongyang/article/details/52974406 1.微服务 微服务主要包含服务注册,服务发现,服务路由,服务配置,服务熔断,服务降级 ...
- Springboot揭秘-快速构建微服务体系-王福强-2016年5月第一次印刷
JavaConfig项目: spring IOC有一个非常核心的概念——Bean.由Spring容器来负责对Bean的实例化,装配和管理.XML是用来描述Bean最为流行的配置方式.Spring可以从 ...
随机推荐
- Istio on ACK集成生态(2): 扩展AlertManager集成钉钉助力可观测性监控能力
阿里云容器服务Kubernetes(简称ACK)支持一键部署Istio,可以参考文档在ACK上部署使用Isito.Istio on ACK提供了丰富的监控能力,为网格中的服务收集遥测数据,其中Mixe ...
- Redis源码解析:04字典的遍历dictScan
dict.c中的dictScan函数,用来遍历字典,迭代其中的每个元素.该函数使用的算法非常精妙!!!所以必须记录一下. 遍历一个稳定的字典,当然不是什么难事,但Redis中的字典因为有rehash的 ...
- Twitter 宣布抛弃 Mesos,全面转向Kubernetes
摘要: 从最早Mesos“代言人”到如今的全面转向“Kubernetes Native”,Twitter的举动再一次佐证了‘Kuberentes已经成为容器编排事实标准’这一断言. 本文作者:张磊 阿 ...
- 在线学编程!十大IT在线教育网站推荐
在线学编程!十大IT在线教育网站推荐 1.CSDN学院(http://edu.csdn.net/) CSDN学院是CSDN推出的一个面向中国软件开发者和IT专业人员的技术教育服务平台.主要提供IT领域 ...
- 2014年最热门的国人开发开源软件TOP100
2014年最热门的国人开发开源软件TOP100 不知道从什么时候开始,很多一说起国产好像就非常愤慨,其实大可不必.做开源中国六年有余,这六年时间国内的开源蓬勃发展,从一开始的使用到贡献,到推出自己很多 ...
- python基础之逻辑题(1)
python基础之逻辑题(1) 1.用一行代码实现数值交换? 2.求结果--fromkeys? 3.1,2,3,4,5能组成多少个互不相同且无重复的三位数? 4.有两个字符串列表a和b,每个字符串是逗 ...
- H3C 用交换机扩展以太网拓扑
- JSX语法及特点介绍
1.1 基本语法 1)自定义组件名首字母大写:元素名即组件名,首字母需要大写.首字母小写时React会以为这是HTML的标准标签,因此自定义的组件名需要首字母大写,否则会报错. 2)嵌套:在rende ...
- Python os.getcwd() 方法
Python os.getcwd() 方法 Python OS 文件/目录方法 概述 os.getcwd() 方法用于返回当前工作目录. 语法 getcwd()方法语法格式如下: os.getcwd ...
- 【原生JS】简单取随机数
因为js本身取随机数仅能取 0 到 1之间的数,所以..... 取 1 - 10之间的随机数. function getSJS(x,y,z){ var int = null; while(int &g ...