•Nacos
•Consul
异构微做事

非Spring Cloud运用,统称异构微做事。比如你的遗留项目,或者非JVM运用。
“完美整合”的三层含义
•享受做事创造的上风
•有负载均衡
•有断路器
为什么要造这个轮子?缘故原由有两点:
•Spring Cloud子项目 Spring Cloud Netflix Sidecar 是可以快速整合异构微做事的。然而,Sidecar只支持利用Eureka作为做事创造,如果利用其他做事创造组件就抓瞎了。
•Sidecar是基于Zuul 1.x的,Spring Cloud官方明确声明,未来将会逐步淘汰Zuul。今年早些时候,我有给Spring Cloud官方提出需求,希望官方实现一个基于Spring Cloud Gateway的新一代Sidecar,然而官方表示并没有该操持。详见:https://github.com/spring-cloud/spring-cloud-gateway/issues/735[2]
既然没有,索性自己写了。
事理•Wii根据配置的异构微做事的IP、端口等信息,将异构微做事的IP/端口注册到做事创造组件上 。
•Wii实现了 康健检讨 ,Wii会定时检测异构微做事是否康健。如果创造异构微做事不康健,Wii会自动将代表异构微做事的Wii实例下线;如果异构微做事规复正常,则会自动上线。最长延迟是30秒,详见 WiiChecker#check 。
哀求•【必须】你的异构微做事需利用HTTP通信。这一点严格来说不算哀求,由于Spring Cloud本身便是基于HTTP的;
•【可选】如果微做事配置了 wii.health-check-url ,则表示开启了Wii的康健检讨,此时,你的异构微做事需实现康健检讨(可以是空实现,只要暴露一个端点,返回类似 {\"大众status\"大众: \公众UP\"大众} 的字符串即可)。
利用示例•如利用Nacos作为做事创造组件,详见 examples/spring-cloud-wii-example-nacos
•如利用Consul作为做事创造组件,详见 examples/spring-cloud-wii-example-consul
示例代码(以Nacos做事创造为例)
1 依赖管理:Spring Cloud Alibaba版本必须是2.1.x+,否则会报错。这紧张是由于Spring Cloud Alibaba修正了包名命名…不同版本的类名包构造不同,而Wii利用了Nacos的类,以是版本必须保持同等。
<dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>2.1.0.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies></dependencyManagement>
2 加依赖:
<dependency> <groupId>com.itmuch</groupId> <artifactId>spring-cloud-wii</artifactId> <version>0.0.1-SNAPSHOT</version></dependency>
3 写配置:
server: port: 8070spring: cloud: nacos: discovery: server-addr: localhost:8848 gateway: discovery: locator: enabled: true application: name: wii-node-servicewii: # 异构微做事的IP ip: 127.0.0.1 # 异构微做事的端口 port: 8060 # 异构微做事的康健检讨URL health-check-url: http://localhost:8060/health.json
配置比较大略,便是把Wii注册到Nacos上,然后添加了几行wii的配置。
异构微做事
我这里准备了一个NodeJS编写的大略微做事。
var http = require('http');var url = require(\公众url\"大众);var path = require('path');// 创建servervar server = http.createServer(function(req, res) { // 得到要求的路径 var pathname = url.parse(req.url).pathname; res.writeHead(200, { 'Content-Type' : 'application/json; charset=utf-8' }); // 访问http://localhost:8060/,将会返回{\"大众index\"大众:\公众欢迎来到首页\公众} if (pathname === '/') { res.end(JSON.stringify({ \公众index\公众 : \"大众欢迎来到首页\公众 })); } // 访问http://localhost:8060/health,将会返回{\"大众status\"大众:\公众UP\"大众} else if (pathname === '/health.json') { res.end(JSON.stringify({ \"大众status\公众 : \"大众UP\公众 })); } // 其他情形返回404 else { res.end(\"大众404\"大众); }});// 创建监听,并打印日志server.listen(8060, function() { console.log('listening on localhost:8060');});
测试
测试1:Spring Cloud微做事完美调用异构微做事
你的Spring Cloud项目整合Ribbon,只需构建 http://wii-node-service 就可以要求到异构微做事了。
示例:
Ribbon要求 http://wii-node-service/ 会要求到 http://localhost:8060/ 以此类推。
至于断路器,正常为你的Spring Cloud微做事整合Sentinel或者Hystirx、Resilience4J即可 。
测试2:异构微做事完美调用Spring Cloud微做事
由于Wii基于Spring Cloud Gateway,而网关自带转发能力啊。
示例:
如果你有一个Spring Cloud微做事叫做 spring-cloud-microservice ,那么NodeJS运用只需构建 http://localhost:8070/spring-cloud-microservice/ ,Wii就会把要求转发到 spring-cloud-microservice 的 / 。
而Spring Cloud Gateway是整合了Ribbon的,以是实现了负载均衡;Spring Cloud Gateway还可以整合Sentinel或者Hystirx、Resilience4J,以是也带有了断路器。
Wii优缺陷剖析Wii的设计和Sidecar基本同等,优缺陷和Sidecar的优缺陷也是一样的。
优点:
•接入大略,几行代码就可以将异构微做事整合到Spring Cloud生态
•不侵入原代码
缺陷:
•每接入一个异构微做事实例,都须要额外支配一个Wii实例,增加了支配本钱(虽然这个本钱在Kubernetes环境中险些可以忽略不计(只需将Wii实例和异构微做事作为一个Pod支配即可));
•异构微做事调用Spring Cloud微做事时,实质是把Wii当网关在利用,经由了一层转发,性能有一定低落。不过一样平常认为这个性能损耗是可以接管的。和快速接入带来的好处比较,这点性能损耗算啥。
GitHub地址
https://github.com/eacdy/spring-cloud-wii 欢迎Star、follow。
干货分享
最近将个人学习条记整理成册,利用PDF分享。关注我,回答如下代码,即可得到百度盘地址,无套路领取!
•001:《Java并发与高并发办理方案》学习条记;
•002:《深入JVM内核——事理、诊断与优化》学习条记;
•003:《Java口试宝典》
•004:《Docker开源书》
•005:《Kubernetes开源书》
•006:《DDD速成(领域驱动设计速成)》
•007:全部
•008:加技能谈论群