Spring Cloud是目前非常流行的微服务化解决方案,它将Spring Boot的便捷开发和Netflix OSS的丰富解决方案结合起来。如我们所知,Spring Cloud不同于Dubbo,使用的是基于HTTP(s)的Rest服务来构建整个服务体系。
那么有没有可能使用一些非JVM语言,例如我们所熟悉的Node.js来开发一些Rest服务呢?当然是可以的。但是如果只有Rest服务,还不能接入Spring Cloud系统。我们还想使用起Spring Cloud提供的Eureka进行服务发现,使用Config Server做配置管理,使用Ribbon做客户端负载均衡。这个时候Spring sidecar就可以大显身手了。
Sidecar起源于Netflix Prana。他提供一个可以获取既定服务所有实例的信息(例如host,端口等)的http api。你也可以通过一个嵌入的Zuul,代理服务到从Eureka获取的相关路由节点。Spring Cloud Config Server可以直接通过主机查找或通过代理Zuul进行访问。
需要注意的是你所开发的Node.js应用,必须去实现一个健康检查接口,来让Sidecar可以把这个服务实例的健康状况报告给Eureka。
microservice-sidecar/pom.xml
4.0.0
com.itmuch.cloud
microservice-spring-cloud
0.0.1-SNAPSHOT
microservice-sidecar
jar
UTF-8
org.springframework.cloud
spring-cloud-netflix-sidecar
org.springframework.cloud
spring-cloud-starter-eureka
说明:
1)添加依赖spring-cloud-netflix-sidecar
spring:
application:
name: microservice-sidecar
server:
port: 8070
eureka:
client:
service-url:
defaultZone: http://user:password123@localhost:8761/eureka
instance:
prefer-ip-address: true
sidecar:
port: 8060
health-uri: http://localhost:8060/health.json
说明:
1)在application.yml里加入sidecar.port和sidecar.health-uri的配置。
2)其中sidecar.port属性代表这个Node.js应用监听的端口,指定非java应用的健康监听端口。
3)这是为了让sidecar可以正常的注册到Eureka服务中。
4)sidecar.health-uri是一个用来模拟Spring Boot应用健康指标的接口的uri。
5)它必须返回如下形式的json文档: health-uri-document
com.itmuch.cloud.SidecarApplication
package com.itmuch.cloud;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.sidecar.EnableSidecar;
@SpringBootApplication
@EnableSidecar
public class SidecarApplication {
public static void main(String[] args) {
SpringApplication.run(SidecarApplication.class, args);
}
}
说明:
1)编写sidecar微服务;
2)启动类上加上@EnableSidecar注解。
3)这是一个组合注解,它整合了三个注解,分别是@EnableCircuiBreaker,@EnableDiscoveryClient和@EnableZuulProxy;
var http = require('http');
var url = require("url");
var path = require('path');
// 创建server
var 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');
});
node node-service.js
http://localhost:8761/
http://localhost:8060/
1)http://localhost:8060/health.json
说明:
1)非java应用返回健康状态;
2)sidecar.health-uri是一个用来模拟Spring Boot应用健康指标的接口的uri;
3)提供http接口,返回json:{"status" : "up"},status用于描述微服务的状态,
4)常见的取值有UP,DOWN,OUT_OF_SERVICE,UNKNOWN等
http://localhost:8070/
http://localhost:8070/health.json
http://localhost:8040/routes
http://localhost:8040/microservice-sidecar/health.json
http://localhost:8040/microservice-sidecar/
说明:
1)zuul-》microservice-sidecar-》nodes服务;==============================
QQ群:143522604
群里有相关资源
欢迎和大家一起学习、交流、提升!
==============================