【SpringCloud】Sidecar多语言微服务入手

Sidecar多语言微服务入手


Sidecar组件的作用是支撑其他语言和平台的微服务,向提供或调用其他语言微服务接口。

搭建准备

名词解释

  • 微服务提供者
    该微服务提供服务接口给其它微服务调用。
  • 微服务调用者
    该微服务调用其他微服务的服务接口。
  • 异语言微服务
    指在spring cloud微服务框架下的其他语言微服务。

示例准备

  • 在本示例中时,达到效果需要至少四个项目
  1. 基于Eureka的微服务注册中心:eureka-server
  2. 基于SpringBoot的微服务提供者:server-provider
  3. 基于Sidecar的多语言微服务支持:service-sidecar-server
  4. 基于NodeJS的微服务消费者:node-customer

异语言搭建和部署

  • 在对异语言搭建和部署时,只需要
  1. 基于Sidecar的多语言微服务支持:service-sidecar-server
  2. 异语言的微服务(例如Ruby,NodeJS):example-service

起步

  1. 创建,编写和运行eureka-server,作为注册中心,配置跟正常注册中心一样。
  2. 创建,编写和运行server-provider,作为服务提供者示。例
  3. 创建,编写和运行service-sidecar-server, example-service, 作为服务调用者示例。

在对异构(多语言)搭建和部署时,要求

  • 异语言微服务, Sidecar服务必须部署在同一台主机上。
  • 每个异语言微服务都需要一个Sidecar服务一对一配套部署。
    在这里插入图片描述
图 1 异语言调用流程

异语言微服务调用者调用微服务提供者的服务时,无需知晓对方IP,只需要知晓该微服务在注册中心注册的名字,然后通过Sidecar调用。以下举例。

  1. 创建并配置(运行在某个端口上),运行Spring Cloud Sidecar项目。
    配置yml
server:
  port: 8100
sidecar:
  port: 8101                                      # 微服务的端口
  health-uri: http://localhost:8060/health.json   # 微服务的健康检查URL
  1. 创建,配置,运行异语言微服务(运行在另一个端口上)。
  • 需要响应Sidecar,以及提供健康检查。
    检查方式为,提供一个接口(一般为/health,在Sidecar的yml文件中配置约定的路径),返回
{
  "status": "UP"
}

示例

server-provider(服务提供者)

在此项目中,服务提供者运行在8001端口。

# application.yml
spring:
  application:
    name: provider-server-client
server:
  port: 8001
eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8000/eureka/
  instance:
    instance-id: ${spring.application.name}:${server.port}
// TestController.java
/**
此处监听了</test>路径的GET请求并返回字符串。
*/
@RestController
@EnableDiscoveryClient
@RequestMapping("/test")
public class TestController {

    @GetMapping
    public String tets(){
        return "这条数据由Spring Boot项目: provider-server-client返回";
    }

    @GetMapping("/add/{a}/{b}")
    public Integer add(@PathVariable Integer a, @PathVariable Integer b){
        return new Random().nextInt() + b;
    }
}

Sidecar

在本例中,java项目:service-sidecar-server运行在8100端口

# application.yml
spring:
  application:
    name: demo-sidercar-server # 微服务名
server:
  port: 8100 # sidecar运行端口
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8000/eureka/ # 注册中心主机
  instance:
    prefer-ip-address: true
    instance-id: ${spring.application.name}:${server.port}
sidecar:
  port: 8101 # 异语言微服务运行端口
  health-uri: http://localhost:8101/health # 健康检查url

node-customer(异语言微服务示例)

const express = require('express')   
const logger = require('morgan')
const request = require('request')
 
const app = express()
const port = 8101
 
app.use(logger('combined'))  
//服务健康检查接口
app.get('/health', (req, res) => {  
    res.json({
        status: 'UP'
    })
})
//调用其它微服务测试
var options = {
    url:'http://localhost:8100/provider-server-client/test' //调用地址
}
app.get('/nodetest', (req, res) => {  
    request.get(options, function(err, response, body){
        res.json({
            data: response.body
        })
    })
})

app.listen(port, () => console.log(`Example app listening on port ${port}!`))
//....

上述例子中,在同一台主机运行Sidecar服务(端口:8100)和Node语言的微服务(端口:8101)之后,在NodeJS中直接调用Sidecar服务,带上其它微服务名(或者称为ID)

http://localhost:8100/provider-server-client/test

运行结果:
在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值