springcloud使用 sidecar实现跨语言微服务调用
2018-10-12 本文已影响12人
无妄zxc
引言
随着近几年微服务的兴起,越来越多的人使用springcloud作为微服务框架(基于java语言实现的微服务框架),因此就产生了这样的需求:能否将非java语言实现的项目接入到springcloud框架中。
答案是肯定的,springcloud为了解决此问题,推出了一款名叫sidecar的组件。
Sidecar
Spring Cloud Netflix Sidecar 包含一个简单的http api来获取给定服务的所有实例(即主机和端口)。然后可以通过从Eureka获取其路由条目的嵌入式Zuul代理来代理服务调用。可以通过主机查找或通过Zuul代理访问Spring Cloud Config服务器。但是第三方程序必须执行健康检查,以便Sidecar可以向应用程序启动或关闭时向eureka报告。
Sidecar使用步骤
-
首先我们需要一个第三方的程序,可以是python,nodejs等非java语言编写的程序,本文我们使用了一个java编写的第三方接口程序。
-
第三方程序提供health接口,接口返回如下格式的json字符串。
{
"status":"UP"
}
- 创建sidecar项目
1 引入依赖
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-netflix-sidecar</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
</dependencies>
2 配置文件
spring:
application:
name: microservice-sidecar #服务名
server:
port: 8070
eureka: #加入到eureka
client:
service-url:
defaultZone: http://localhost:8761/eureka
instance:
prefer-ip-address: true
sidecar:
port: 8060 #异构微服务的端口
healthUri: http://localhost:8060/health #对应第三方程序的health接口
3 编写启动类
@SpringBootApplication
@EnableSidecar
public class SidecarApplication {
public static void main(String[] args) {
SpringApplication.run(SidecarApplication.class, args);
}
}
注意添加@EnableSidecar注解
经过上面的几步sidecar服务已经可以正常启动,并且可以代理第三方程序,下面我们进行测试。
测试
架构示意图如下
demo架构示意图.png
第三方程序
第三方服务.png
Online服务
online服务代码.png online服务代码
在online服务的controller调用第三方程序,如果能调通,说明我们的sidecar服务搭建成功。
启动第三方程序
启动注册中心
启动sidecar服务
启动online微服务
服务启动成功
启动成功.png
我们调用online服务的query端口,如果返回了 第三方服务的字符串“query”则调用成功。
调用成功.png至此,我们的第三方程序,就接入到了springcloud框架中。