Sidecar简介
Spring Cloud Alibaba v2.1.1.RELEASE中增加了一个非常重要的新特性,对Spring Cloud Alibaba Sidecar模块支持。
该模块作为一个代理的服务来间接性的让其他语言可以使用spring cloud alibaba等相关组件。通过与网关来进行路由的映射,从而可以做到服务的获取,然后可以使用Ribbon间接性调用。

如上图,Spring Cloud应用请求sidercar然后转发给其他语言的模块,优势是对于异构服务代码零侵入,不需要直接根据nacos或其他注册中心api注册等。
使用入门
示例代码请参阅:spring-cloud-alibaba-sidecar-examples
Spring Cloud创建一个Spring应用注册在Nacos上,应用请求8070端口,通过sidecar转到本机8060端口Node.js服务。
Node.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: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');
});
异构服务
- Maven依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sidecar</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
</dependencies>
- 异构配置
server:
port: 8070
spring:
cloud:
nacos:
username: nacos
password: nacos
discovery:
server-addr: 127.0.0.1:8848
group: test
gateway:
discovery:
locator:
enabled: true
application:
name: node-service
sidecar:
# 异构微服务的IP
ip: 127.0.0.1
# 异构微服务的端口
port: 8060
# 异构微服务的健康检查URL
#health-check-url: http://localhost:8060/health.json
management:
endpoint:
health:
show-details: always
总结
随着微服务越来越流行,跨语言之间调用越来越多,Restful OPEN API虽然提供了跨语言调用的一种方式,但是效率低,同时需要各语言来实现OPEN API规范,开发维护成本高。sidecar模块实现了零一种无侵入跨语言在微服务组件之间调用的机制。




