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能解决其他主流微服务框架费力才能解决或者解决不了的问题
微服务粒度自由拆分,修改配置和拆分包即可实现,几乎不用修改Java代码。
微服务API接口文档自动生成以及API文档定制。
微服务与数据库一对一、一对多、多对多关系轻松切换,而不用修改代码的问题。
几行代码实现经典的分片顺序消息推送场景。
微服务接口编排。
部署和监控问题。
帮助实现devops开发运维协作能力。
actor-model实现,开发异步业务而没有回调地狱!
编写一个微服务单元只需要实现接口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进行处理 });
接下来,你只需要在各个微服务内编写各自的微服务单元,然后就可以实现自己的分布式应用啦,就是这么简单!
微服务间通讯RPC、MQ。
方法级粒度的服务治理、服务可视化管理。
集中日志收集和可视化日志查询。
分布式业务链路追踪方案,可以在上述3的日志系统内查询定位出单条业务链路上完备日志线。
将Java web应用集成到微服务集群内形成业务层的"微服务",复用框架提供的自动化集成部署和横向扩展能力,目前支持任何servlet框架集成,特别对springboot做了友好支持。
微服务和数据库一对一、一对多、多对多关系的灵活支持。
构建部署和持续集成插件。
业务监控插件。
业务线程池管理和监控。
服务不下线:全微服务0停服更新。
内置轻量级的持久层dao插件,支持连接池监控、慢SQL监控和防SQL注入等。
轻量级api网关,具有一定的api接口编排能力。
api文档自动化生成的能力。
基于oauth2.0的api网关安全管理和ip白名单控制能力。
可快速实现开放平台能力。
redis缓存插件,支持多redis数据源能力。
分布式消息订阅和推送功能。
定时任务调度功能。
集中配置管理。
分布式锁。
多环境管理(研发、测试、生产环境)
本地非集群运行模式和本地集群运行模式,方便开发阶段调试。
log4j-1.x、log4j-2.x日志插件
短信和邮件发送插件
mqtt协议客户端集成
对腾讯云k8s容器服务的集成
对数据库读写分离的友好支持。
一致性哈希算法的封装支持。
基于一致性哈希算法的异步保序功能。
插件式无限扩展新功能的能力。
函数响应式同步编程风格实现异步业务逻辑。
内置持久层框架对分布式事务支持
api网关内置反向代理的功能
api接口编排脚本支持热更新
断路器、熔断技术
基于api网关内置反向代理实现灰度/蓝绿/红黑发布。
集成rxJava实现纯异步的微服务调用模式,可完全杜绝线程阻塞情况的发生,预估可成倍提升业务线程的性能。 已上线。
不局限于特定语言,将来会率先支持.NET语言实现微服务,帮助解决许多传统企业历史信息系统转型互联网微服务架构。可行性方面,本框架已经抽象出了rpc通信协议规范和服务治理规范,因此几乎其他所有OOP语言都可以集成进来。
基于"录音机"的API自动化测试方案。
分库分表方案。
对rancher管理平台的rest api集成。
xian,即“贤”,来自某个人的名,代表“好”、“佳”的意思。谨以此名字纪念我死去的爱情。
请大家多多指点,加星加星!关注! 那些开发中和规划中的功能就全靠你们的星星了,可怜脸。
鸣谢:
http://netty.io,
https://github.com/ReactiveX/RxJava,
https://github.com/alibaba/fastjson,
https://github.com/google/guava, https://logging.apache.org/log4j,
http://zookeeper.apache.org,
http://curator.apache.org;
frame框架说明(概述) 1. 这个框架是为了解决什么问题? 减少服务的重复代码 多个服务使用框架提供的API,框架能够集中管理服务的资源分配(使用与实现的分离有利于服务的升级) 多个服务复用一个框架利于整体更新 多个服务运行在同一个jvm里面减少额外内存消耗 2. 这个框架实现了什么功能? 服务只需要继承指定接口即可自动读取配置、运行、动态加载管理等 服务的动态部署(热加载) 服务可使用框架提
在前端网页中,由于需要嵌入一些网页,但是打开后却报错,信息如下: Refused to display 'http://localhost:8080/' in a frame because it set 'X-Frame-Options'。 原因: 后端开发框架是: SpringBoot + Security , 而 Spring Security默认设置X-Frame-Options 为 de
Frame的应用 框架相当于<body>,所以一个存在框架的html文件是不存在body的。 框架的作用就是划分屏幕,使界面尽可能少地实现刷新。最基本的应用就是菜单—内容界面。 1、 框架的创建 <frameSet rows=”20%,*” id=”frameset_id”> <frame name=”1” src=1.htm> <frameSet name=”2” cols=”*,3*”>
FRAME(框架)是Web上经常会看到的页面结构。使用可视Web开发工具(比如Dreamweaver或者Frontpage),虽然可以在WYSIWYG环境中通过简单的鼠标托拽完成FRAME的构建,但是要实现真正细致甚至强大的功能,仔细理解FRAME的代码结构至关重要!你将发现,FRAME原来是这样的亲切易用。 创建基本的FRAMESET FRAMESET页面与普遍的Web页面有些不同。虽然
页面不同之间的调用按照以下规律: 1,页面。 一层页面一个parent 2,frame层。 同页面的不同frame,不分层都用名称直接调用。 总结:先定义到页,再定义到frame,最后是form。
当今的WEB应用要适应各种不同的大小的显示器,很多HTML元素支持百分比,可以完成比例布局。但实际的布局不只有百分比,也有固定大小的部分,单纯使用百分比是无法实现的。通常要实现这一布局自适应,传统的方法是用frame来实现,但是会存在页面加载不一致、搜索引擎收录困难等问题。现在一般用CSS或javascript技术来实现,有时还需要两者结合使用。 CSS实现布局主要是靠CSS的绝对定位和边距设置,
帧标志 1.<frameset></frameset> 2.<frame> 3.<noframes></noframes> 帧是由英文Frame翻译过来的,它可以用来向浏览器窗口中装载多个Html文件。即每个Html文件占据一个帧,而多个帧可以同时显示在同一个浏览器窗口中,它们组成了一个最大的帧,也即是一个包含多个Html文档的Html文件(我称它为主文档)。帧通常的使用方法是在一个帧中放置目录(
ref:http://bbs.csdn.net/topics/280002948 1、NAL、Slice与frame意思及相互关系 NAL指网络提取层,里面放一些与网络相关的信息 Slice是片的意思,264中把图像分成一帧(frame)或两场(field),而帧又可以分成一个或几个片(Slilce);片由宏块(MB)组成。宏块是编码处理的基本单元。 2、NAL nal_unit_type中的1
点击打开链接 frameset 元素可定义一个框架集。 <frame> 标签定义 frameset 中的一个特定的窗口(框架)。 iframe 元素会创建包含另外一个文档的内联框架(即行内框架)。 1、frame不能脱离frameSet单独使用,iframe可以; 2、frame不能放在body中;如下可以正常显示: <!--<body>--> <frameset rows="50%,*">
frame标签有frameset、frame、iframe三种,frameset跟其他普通标签没有区别,不会影响到正常的定位,而frame与iframe对selenium定位而言是一样的,selenium有一组方法对frame进行操作。 1.怎么切到frame中(switch_to.frame()) selenium提供了switch_to.frame()方法来切换frame switch_t
数据框是R的一种数据结构。它通常是矩阵形式的数据,但矩阵各列可以是不同类型的。 数据框是一种特殊的列表对象。各列表成员必须是向量(数值型、字符型、逻辑型)、因子、数值型矩阵、列表,或其它数据框。向量、因子成员为数据框提供一个变量,如果向量非数值型则会被强制转换为因子,而矩阵、列表、数据框这样的成员为新数据框提供了和其列数、成员数、变量数相同个数的变量。作为数据框变量的向量、因子或矩阵必须具有相同的
本文向大家介绍微服务哪些框架相关面试题,主要包含被问及微服务哪些框架时的应答技巧和注意事项,需要的朋友参考一下 Dubbo,是阿里巴巴服务化治理的核心框架,并被广泛应用于阿里巴巴集团的各成员站点。阿里巴巴近几年对开源社区的贡献不论在国内还是国外都是引人注目的,比如:JStorm 捐赠给 Apache 并加入 Apache 基金会等,为中国互联网人争足了面子,使得阿里巴巴在国人眼里已经从电商升级为一
ketchup 是一个基于 dotnet core 的微服务框架。网关:兼容 kong,rpc:grpc支持远程调用。
Adnc 是一个轻量级的 .Net Core 微服务开发框架,同时也适用于单体架构系统的开发。支持经典三层与DDD架构开发模式、集成了一系列主流稳定的微服务配套技术栈。
Seata 的事务上下文由 RootContext 来管理。 应用开启一个全局事务后,RootContext 会自动绑定该事务的 XID,事务结束(提交或回滚完成),RootContext 会自动解绑 XID。 // 绑定 XID RootContext.bind(xid); // 解绑 XID String xid = RootContext.unbind(); 应用可以通过 RootCon
我在 PLay 2 中将我的应用程序划分为不同的项目。但我刚刚意识到我不知道如何在同一台服务器中运行多个播放应用程序。 有人知道怎么做吗? 让我们假设这是不可能的,因此,我将在同一个根项目中部署多个播放应用程序(微服务将充当插件)。你认为这会打败微服务架构吗?。我会让每个模块独立行动。
基本 Nest 微服务是一种使用与HTTP不同的传输层的应用程序。 安装 首先,我们需要安装所需的软件包: $ npm i --save @nestjs/microservices 概述 通常,Nest支持一系列内置的传输器。它们基于 请求-响应 范式,整个通信逻辑隐藏在抽象层之后。多亏了这一点,您可以轻松地在传输器之间切换,而无需更改任何代码行。我们不支持具有基于日志的持久性的流平台,例如 Ka
我读了一些文章,看了一些视频,但在为这些微服务提供服务方面,没有找到具体的建议。我的理解是,他们应该使用自己的应用程序服务器。 我的问题是它们应该部署在不同的服务器上,还是没关系。 当它们在同一台服务器(计算机)上提供服务时,不会有端口冲突吗?
我是测微计新手。有人能告诉我如何在spring boot中集中管理微服务指标吗? 在哪里可以获得influxdb中所有注册的服务信息、矩阵和存储的度量?