非jvm语言结合Sidecar实现服务注册
如何将非jvm语言提供的服务纳入到Spring Cloud管理中来,找到了这个Sidecar组件,发现官方提供一篇文档(https://cloud.spring.io/spring-cloud-netflix/multi/multi__polyglot_support_with_sidecar.html),如果在阅读时发现本文有误,请及时通知给我。
非JVM微服务可操作Eureka的REST端点,从而实现注册与发现。事实上,也可使用Sidecar更方便整合非JVM微服务。
Spring Cloud Netflix Sidecar的灵感来自Netflix Prana,它包括了一个简单的HTTP API来获取指定服务所有实例信息(例如主机和端口)。不仅如此,还可通过内嵌的Zuul来代理服务调用,该代理从Eureka Server中获取信息。非JVM微服务需要实现监控检查,以便Sidecar将它的状态上报该Eureka Server,健康检查的形式如下:
{
"status":"UP"
}
编写node.js微服务
1.node-service.js代码如下
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:8028/,将会返回{"index":"欢迎来到首页"}
if (pathname === '/') {
res.end(JSON.stringify({ "index" : "欢迎来到首页" }));
}
// 访问http://localhost:8028/health,将会返回{"status":"UP"}
else if (pathname === '/health.json') {
res.end(JSON.stringify({ "status" : "UP" }));
}
// 其他情况返回404
else {
res.end("404");
}
});
// 创建监听,并打印日志
server.listen(8028, function() {
console.log('listening on localhost:8028');
});
2.测试
2.1.使用node node-service.js 命令启动该项目
2.2 访问http://127.0.0.1:8028/health.json及http://127.0.0.1:8028返回内容如下:
至此,非JVM微服务创建完毕。
创建cloud-sidecar微服务
1.创建项目
创建cloud-sidecar微服务
2.添加依赖
org.springframework.cloud
spring-cloud-starter-netflix-zuul
org.springframework.cloud
spring-cloud-starter-netflix-eureka-client
org.springframework.cloud
spring-cloud-netflix-sidecar
3.在启动类上添加@EnableSidecar注解,声明这是一个Sidecar
@EnableSidecar
@SpringBootApplication
public class CloudSidecarApplication {
public static void main(String[] args) {
SpringApplication.run(CloudSidecarApplication.class, args);
}
}
4.修改配置文件
server:
port: 8027
spring:
application:
name: cloud-sidecar
eureka:
client:
serviceUrl:
defaultZone: http://127.0.0.1:8001/eureka/
instance:
prefer-ip-address: true
sidecar:
port: 8028 # Node.js微服务的端口
health-uri: http://127.0.0.1:8028/health.json # Node.js微服务的健康检查URL
由配置可知,已经把Sidecar注册到Eureka Server上,并用sidecar.port属性指定了非JVM微服务所监听的端口,用sidecat.health-uri属性指定了非JVM微服务的健康检查URL。
总测试
(1)启动cloud-discovery-eureka
(2)启动cloud-register-user
(3)启动node-service
(4)启动scloud-sidecar
(5)访问http://localhost:8027/cloud-register-user/1
因此,非JVM微服务可通过这种方式调用注册在Eureka Server上的JVM微服务。
非JVM应用通过Sidecar接入Spring Cloud微服务集群的整体架构,大致就如下图:
1.gitee:https://gitee.com/StarskyBoy/cloud
2.github: https://github.com/StarskyBoy/cloud