Java 微服务框架 xian frame

Apache-2.0
Java 查看源码»
跨平台
2018-07-30
黑and白

xian-asynchronous

xian是一个微服务框架,更确切的说是一个微服务套件。它基于Java8编写,不依赖spring,不依赖dubbo,上手和学习难度非常小。如果是以学会使用为目的,只要你会Java语言会gradle构建工具,甚至不需要了解微服务的各种概念,比学会使用dubbo和spring cloud不知道简单多少倍。

很开心地告诉大家,现在我们可以基于xian开发100%异步的微服务了!我们基于netty非阻塞io和rxJava2响应式编程风格,实现了以同步风格代码开发异步业务逻辑。 从gateway到业务层,整个业务生命周期都是异步的!当然,DAO层目前依然使用的是阻塞的JDBC,是由于目前我们局限于JDBC阻塞的标准API。 至此,xian也是actor模型的完整实现了,希望哪天可以跟akka、vertx做性能pk!

xian frame的基础介绍

xian frame能解决其他主流微服务框架费力才能解决或者解决不了的问题

  1. 微服务粒度自由拆分,修改配置和拆分包即可实现,几乎不用修改Java代码。

  2. 微服务API接口文档自动生成以及API文档定制。

  3. 微服务与数据库一对一、一对多、多对多关系轻松切换,而不用修改代码的问题。

  4. 几行代码实现经典的分片顺序消息推送场景。

  5. 微服务接口编排。

  6. 部署和监控问题。

  7. 帮助实现devops开发运维协作能力。

  8. actor-model实现,开发异步业务而没有回调地狱!

基于xian你可以实现如下逻辑架构图对应的微服务集群

基于xian你可以实现如下逻辑架构图对应的微服务集群

30分钟学会使用xian frame开发微服务

编写一个微服务单元

编写一个微服务单元只需要实现接口Unit即可:

public class HelloWorldUnit implements Unit {
    @Override
    public String getName() { // 指定一个unit名称
        return "helloWorld";
    }
    
    @Override
    public Group getGroup() { // 指定当前微服务单元所属的group对象
        return TestGroup.singleton;
    }

    @Override
    public Input getInput() { // 指定微服务单元的入参定义
        return Input.create().add("yourName", String.class, "你的名字", REQUIRED);
    }

    @Override
    public void execute(UnitRequest msg,Handler<UnitResponse> handler) { // 当前微服务单元的执行逻辑
        UnitResponse unitResponse = UnitResponse.createSuccess("hello world, "+ msg.getString("yourName"));
        handler.handle(unitResponse); // callback回调 以返回unit执行结果
    }
}

定义一个微服务单元是不是很简单? 接下来我们展示如何使用RPC来调用该服务单元:

UnitResponse resp = SingleRxXian.call("test", "helloWorld", map/bean).blockingGet();//这种阻塞业务的方式,我们是非常不推荐的!这里仅仅做展示。

以上是同步RPC调用,下面展示异步RPC调用:

SingleRxXian
    .call("test", "helloWorld", map/bean)
    .subscribe(unitResponse -> {
        // 这里可以对unitResponse进行处理
    });
    
// 链式调用, 这里如果大家对rxJava有一定的了解的话,那么以下代码你肯定信手拈来
SingleRxXian
    .call("test", "helloWorld", map/bean)
    .flatMap(unitResponse -> {
       return SingleRxXian.call("anotherGroup", "anotherUnit0", unitResponse.dataToMap());
    })
    .flatMap(unitResponse -> {
       return SingleRxXian.call("anotherGroup", "anotherUnit1", unitResponse.dataToMap());
    })
    .subscribe(unitResponse -> {
        // 这里可以对unitResponse进行处理
    });

接下来,你只需要在各个微服务内编写各自的微服务单元,然后就可以实现自己的分布式应用啦,就是这么简单!

xian frame现有功能

  1. 微服务间通讯RPC、MQ。

  2. 方法级粒度的服务治理、服务可视化管理。

  3. 集中日志收集和可视化日志查询。

  4. 分布式业务链路追踪方案,可以在上述3的日志系统内查询定位出单条业务链路上完备日志线。

  5. 将Java web应用集成到微服务集群内形成业务层的&ldquo;微服务&rdquo;,复用框架提供的自动化集成部署和横向扩展能力,目前支持任何servlet框架集成,特别对springboot做了友好支持。

  6. 微服务和数据库一对一、一对多、多对多关系的灵活支持。

  7. 构建部署和持续集成插件。

  8. 业务监控插件。

  9. 业务线程池管理和监控。

  10. 服务不下线:全微服务0停服更新。

  11. 内置轻量级的持久层dao插件,支持连接池监控、慢SQL监控和防SQL注入等。

  12. 轻量级api网关,具有一定的api接口编排能力。

  13. api文档自动化生成的能力。

  14. 基于oauth2.0的api网关安全管理和ip白名单控制能力。

  15. 可快速实现开放平台能力。

  16. redis缓存插件,支持多redis数据源能力。

  17. 分布式消息订阅和推送功能。

  18. 定时任务调度功能。

  19. 集中配置管理。

  20. 分布式锁。

  21. 多环境管理(研发、测试、生产环境)

  22. 本地非集群运行模式和本地集群运行模式,方便开发阶段调试。

  23. log4j-1.x、log4j-2.x日志插件

  24. 短信和邮件发送插件

  25. mqtt协议客户端集成

  26. 对腾讯云k8s容器服务的集成

  27. 对数据库读写分离的友好支持。

  28. 一致性哈希算法的封装支持。

  29. 基于一致性哈希算法的异步保序功能。

  30. 插件式无限扩展新功能的能力。

  31. 函数响应式同步编程风格实现异步业务逻辑。

正在开发中的功能

  1. 内置持久层框架对分布式事务支持

  2. api网关内置反向代理的功能

  3. api接口编排脚本支持热更新

  4. 断路器、熔断技术

规划中的功能

  1. 基于api网关内置反向代理实现灰度/蓝绿/红黑发布。

  2. 集成rxJava实现纯异步的微服务调用模式,可完全杜绝线程阻塞情况的发生,预估可成倍提升业务线程的性能。 已上线。

  3. 不局限于特定语言,将来会率先支持.NET语言实现微服务,帮助解决许多传统企业历史信息系统转型互联网微服务架构。可行性方面,本框架已经抽象出了rpc通信协议规范和服务治理规范,因此几乎其他所有OOP语言都可以集成进来。

  4. 基于&ldquo;录音机&rdquo;的API自动化测试方案。

  5. 分库分表方案。

  6. 对rancher管理平台的rest api集成。

写在末尾

  1. xian,即“贤”,来自某个人的名,代表“好”、“佳”的意思。谨以此名字纪念我死去的爱情。

  2. 请大家多多指点,加星加星!关注! 那些开发中和规划中的功能就全靠你们的星星了,可怜脸。

  3. 鸣谢:
       http://netty.io,
       https://github.com/ReactiveX/RxJava,
       https://github.com/alibaba/fastjson,
       https://github.com/google/guavahttps://logging.apache.org/log4j,
       http://zookeeper.apache.org,
       http://curator.apache.org;

的码云指数为
超过 的项目
加载中

评论(0)

暂无评论

暂无资讯

暂无问答

Arcgis集成 100X

因为SDK从10.2.5直接到了100X,改动很大,官网上也说了要当做一个新的App来集成。

2017/10/24 13:43
12
0
aricgis投影转换的方法

ArcGIS中定义的投影转换方法,在对数据的空间信息要求较高的工程中往往不能适用,有比较明显的偏差。在项目的前期数据准备工作中,需要进行更加精确的三参数或七参数投影转换。下面介绍两种办...

2010/09/06 11:32
665
0
统计中心机房与各地域ip(连接)分布情况

1.格式化收集的ip数据 原始数据 [root@puppetmaster ip_list]# head wuxi_ip_list_20150506.txt 192.168.1.1 四川省 1公司 192.168.1.2 四川省 2公司 192.168.1.3 四川省 3公司 192.168.1.4 ...

2015/11/05 02:51
27
0
省市县三级级联

####主要思想 1.省改变,市改变,并初始化县 2.市改变,县改变 ####html代码 --请选择-- 北京市 河北省 山西省 内蒙古自治区 --请选择-- --请选择-- ####主要步骤 #####1.获取元素对象 var ...

2016/12/08 16:09
1
0
JSON字符串和js对象转换

> https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON #### js数据类型: ``` 字符串、数字、布尔、数组、对象、Null、Undefined ``` #### js Object ...

2016/11/18 00:04
0
0
C# 中的委托和事件

C# 中的委托和事件 - Teng's world - 博客频道 - CSDN.NET http://blog.csdn.net/teng_ontheway/article/details/50720542 .Net委托类型解析 - 文章 - 伯乐在线 http://blog.jobbole.com/10...

2016/06/28 19:59
2
0
Android中的跨进程通信的实现(一)——远程调用过程和aidl

http://foocoder.com/blog/androidzhong-de-kua-jin-cheng-tong-xin-de-shi-xian-%28[%3F]-%29-yuan-cheng-diao-yong-guo-cheng-he-aidl.html/...

2016/03/23 11:49
19
1
QT快速读取显示SQLite3数据库数据​

转自我的博客《QT快速读取显示SQLite3数据库数据》

2014/09/29 15:30
39
0
基于element ui封装的省市区三级联动

工作中总会遇到些头疼的事,例如想在elememt ui中找个三级联动,结果发现没有,于是自己封装了一个。具体代码如下: <template> <div> <p> <el-select select v-model="sheng" placeholder =...

2018/06/17 16:41
267
0
arpg游戏灭妖记,在火舞游戏平台发布了。游戏地址及源码地址。

我的arpg游戏,发布在了火舞游戏平台上。下面是预览地址。 http://i1.51h5.com/open/game/395976/395976035635/index.html 游戏源代码地址:(暂时不是最新的) http://git.oschina.net/ete...

2016/08/08 14:30
258
0

没有更多内容

加载失败,请刷新页面

返回顶部
顶部