SpringCloud-使用Sidecar支持异构平台的微服务

2023-10-30 18:58

本文主要是介绍SpringCloud-使用Sidecar支持异构平台的微服务,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

概述
    Spring Cloud是目前非常流行的微服务化解决方案,它将Spring Boot的便捷开发和Netflix OSS的丰富解决方案结合起来。如我们所知,Spring Cloud不同于Dubbo,使用的是基于HTTP(s)的Rest服务来构建整个服务体系。
    那么有没有可能使用一些非JVM语言,例如我们所熟悉的Node.js来开发一些Rest服务呢?当然是可以的。但是如果只有Rest服务,还不能接入Spring Cloud系统。我们还想使用起Spring Cloud提供的Eureka进行服务发现,使用Config Server做配置管理,使用Ribbon做客户端负载均衡。这个时候Spring sidecar就可以大显身手了。
    Sidecar起源于Netflix Prana。他提供一个可以获取既定服务所有实例的信息(例如host,端口等)的http api。你也可以通过一个嵌入的Zuul,代理服务到从Eureka获取的相关路由节点。Spring Cloud Config Server可以直接通过主机查找或通过代理Zuul进行访问。
    需要注意的是你所开发的Node.js应用,必须去实现一个健康检查接口,来让Sidecar可以把这个服务实例的健康状况报告给Eureka。


创建工程microservice-sidecar


pom.xml
microservice-sidecar/pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>com.itmuch.cloud</groupId><artifactId>microservice-spring-cloud</artifactId><version>0.0.1-SNAPSHOT</version></parent><artifactId>microservice-sidecar</artifactId><packaging>jar</packaging><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><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></project>


说明:

    1)添加依赖spring-cloud-netflix-sidecar

application.yml

spring:application:name: microservice-sidecar
server:port: 8070
eureka:client:service-url:defaultZone: http://user:password123@localhost:8761/eurekainstance:prefer-ip-address: true
sidecar:port: 8060health-uri: http://localhost:8060/health.json


说明:

    1)在application.yml里加入sidecar.port和sidecar.health-uri的配置。

    2)其中sidecar.port属性代表这个Node.js应用监听的端口,指定非java应用的健康监听端口。

    3)这是为了让sidecar可以正常的注册到Eureka服务中。

    4)sidecar.health-uri是一个用来模拟Spring Boot应用健康指标的接口的uri。

    5)它必须返回如下形式的json文档: health-uri-document


SidecarApplication
com.itmuch.cloud.SidecarApplication

package com.itmuch.cloud;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.sidecar.EnableSidecar;@SpringBootApplication
@EnableSidecar
public class SidecarApplication {public static void main(String[] args) {SpringApplication.run(SidecarApplication.class, args);}
}


说明:

    1)编写sidecar微服务;

    2)启动类上加上@EnableSidecar注解。

   3)这是一个组合注解,它整合了三个注解,分别是@EnableCircuiBreaker,@EnableDiscoveryClient和@EnableZuulProxy;


创建nodejs工程-node-service


node-service/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: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" }));}// 其他情况返回404else {res.end("404");}
});
// 创建监听,并打印日志
server.listen(8060, function() {console.log('listening on localhost:8060');
});

启动

node node-service.js

测试
查看注册的服务
http://localhost:8761/

启动nodejs工程
http://localhost:8060/


sidecar检查异构语言的健康地址

1)http://localhost:8060/health.json

说明:

    1)非java应用返回健康状态;

    2)sidecar.health-uri是一个用来模拟Spring Boot应用健康指标的接口的uri;

    3)提供http接口,返回json:{"status" : "up"},status用于描述微服务的状态,

    4)常见的取值有UP,DOWN,OUT_OF_SERVICE,UNKNOWN等


2)访问microservice-sidecar服务
http://localhost:8070/

http://localhost:8070/health.json

3)通过zuul访问microservice-sidecar服务
查看zuul路由映射
http://localhost:8040/routes

zuul访问microservice-sidecar服务


http://localhost:8040/microservice-sidecar/health.json

http://localhost:8040/microservice-sidecar/

说明:

    1)zuul-》microservice-sidecar-》nodes服务;

--------------------- 
原文:https://blog.csdn.net/shenzhen_zsw/article/details/81009238 
 

这篇关于SpringCloud-使用Sidecar支持异构平台的微服务的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/309938

相关文章

springboot集成easypoi导出word换行处理过程

《springboot集成easypoi导出word换行处理过程》SpringBoot集成Easypoi导出Word时,换行符n失效显示为空格,解决方法包括生成段落或替换模板中n为回车,同时需确... 目录项目场景问题描述解决方案第一种:生成段落的方式第二种:替换模板的情况,换行符替换成回车总结项目场景s

SpringBoot集成redisson实现延时队列教程

《SpringBoot集成redisson实现延时队列教程》文章介绍了使用Redisson实现延迟队列的完整步骤,包括依赖导入、Redis配置、工具类封装、业务枚举定义、执行器实现、Bean创建、消费... 目录1、先给项目导入Redisson依赖2、配置redis3、创建 RedissonConfig 配

SpringBoot中@Value注入静态变量方式

《SpringBoot中@Value注入静态变量方式》SpringBoot中静态变量无法直接用@Value注入,需通过setter方法,@Value(${})从属性文件获取值,@Value(#{})用... 目录项目场景解决方案注解说明1、@Value("${}")使用示例2、@Value("#{}"php

SpringBoot分段处理List集合多线程批量插入数据方式

《SpringBoot分段处理List集合多线程批量插入数据方式》文章介绍如何处理大数据量List批量插入数据库的优化方案:通过拆分List并分配独立线程处理,结合Spring线程池与异步方法提升效率... 目录项目场景解决方案1.实体类2.Mapper3.spring容器注入线程池bejsan对象4.创建

线上Java OOM问题定位与解决方案超详细解析

《线上JavaOOM问题定位与解决方案超详细解析》OOM是JVM抛出的错误,表示内存分配失败,:本文主要介绍线上JavaOOM问题定位与解决方案的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录一、OOM问题核心认知1.1 OOM定义与技术定位1.2 OOM常见类型及技术特征二、OOM问题定位工具

基于 Cursor 开发 Spring Boot 项目详细攻略

《基于Cursor开发SpringBoot项目详细攻略》Cursor是集成GPT4、Claude3.5等LLM的VSCode类AI编程工具,支持SpringBoot项目开发全流程,涵盖环境配... 目录cursor是什么?基于 Cursor 开发 Spring Boot 项目完整指南1. 环境准备2. 创建

Python使用FastAPI实现大文件分片上传与断点续传功能

《Python使用FastAPI实现大文件分片上传与断点续传功能》大文件直传常遇到超时、网络抖动失败、失败后只能重传的问题,分片上传+断点续传可以把大文件拆成若干小块逐个上传,并在中断后从已完成分片继... 目录一、接口设计二、服务端实现(FastAPI)2.1 运行环境2.2 目录结构建议2.3 serv

Spring Security简介、使用与最佳实践

《SpringSecurity简介、使用与最佳实践》SpringSecurity是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架,本文给大家介绍SpringSec... 目录一、如何理解 Spring Security?—— 核心思想二、如何在 Java 项目中使用?——

SpringBoot+RustFS 实现文件切片极速上传的实例代码

《SpringBoot+RustFS实现文件切片极速上传的实例代码》本文介绍利用SpringBoot和RustFS构建高性能文件切片上传系统,实现大文件秒传、断点续传和分片上传等功能,具有一定的参考... 目录一、为什么选择 RustFS + SpringBoot?二、环境准备与部署2.1 安装 RustF

springboot中使用okhttp3的小结

《springboot中使用okhttp3的小结》OkHttp3是一个JavaHTTP客户端,可以处理各种请求类型,比如GET、POST、PUT等,并且支持高效的HTTP连接池、请求和响应缓存、以及异... 在 Spring Boot 项目中使用 OkHttp3 进行 HTTP 请求是一个高效且流行的方式。