SpringCloudSpringCloudSpringCloud?SpringBoot?

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使用步骤

  1. 首先我们需要一个第三方的程序,可以是python,nodejs等非java语言编写的程序,本文我们使用了一个java编写的第三方接口程序。

  2. 第三方程序提供health接口,接口返回如下格式的json字符串。

{
"status":"UP"
}
  1. 创建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框架中。

参考文档
https://cloud.spring.io/spring-cloud-static/spring-cloud-netflix/1.3.5.RELEASE/multi/multi__polyglot_support_with_sidecar.html

上一篇下一篇

猜你喜欢

热点阅读