springCloud中的Sidecar多语言支持详解

 更新时间:2024年01月31日 09:59:24   作者:卷不动躺不平的粥  
这篇文章主要介绍了springCloud中的Sidecar多语言支持详解,Sidecar是将一组紧密结合的任务与主应用程序共同放在一台主机Host中,但会将它们部署在各自的进程或容器中,需要的朋友可以参考下

一、Sidecar 的介绍

1.1 引言

在 SpringCloud 的项目中,需要接入一些非 java 程序或第三方接口(无法接入eureka,hystrix,feign等组件的程序)。所以我们可以通过启动一个代理的微服务去和非 java 的程序或第三方接口进行交流,然后再把代理的微服务计入 SpringCloud 的相关组件中。

应用程序和服务通常需要相关的功能,例如监控、日志、集中化配置和网络服务等。这些外围任务可以作为单独的组件或服务来实现。

如果它们紧密集成到应用程序中,它们可以在与应用程序相同的进程中运行,从而有效地使用共享资源。但是,这也意味着它们没有很好地隔离,并且其中一个组件的中断可能会影响其他组件或整个应用程序。此外,它们通常需要使用与父应用程序相同的语言或者技术栈来实现。因此,组件和应用程序彼此之间具有密切的相互依赖性。

如果将应用程序分解为服务,则可以使用不同的语言和技术构建每个服务。虽然这提供了更大的灵活性,但这意味着每个组件都有自己的依赖关系,并且需要特定于语言的库来访问底层平台以及与父应用程序共享的任何资源。此外,将这些功能部署为单独的服务可能会增加应用程序的延迟。管理这些特定于语言的接口的代码和依赖关系也会增加相当大的复杂性,尤其是对于托管、部署和管理服务。

1.2 什么是 Sidecar(边车)模式

将一组紧密结合的任务与主应用程序共同放在一台主机(Host)中,但会将它们部署在各自的进程或容器中。这种方式也被称为“Sidecar(边车)模式”。

边车服务不一定是应用程序的一部分,而是与之相关联。它适用于父应用程序的任何位置。Sidecar 支持与主应用程序一起部署的进程或服务。这就像是如下图所示的边三轮摩托车那样,将边车安装在一辆摩托车上,就变成了边三轮摩托车。每辆边三轮摩托车都有自己的边车。类似同样的方式,边车服务共享其父应用程序的主机。对于应用程序的每个实例,边车的实例被部署并与其一起托管。

1.3 边车模式的优点

  • 在运行时环境和编程语言方面,边车独立于其主要应用程序,因此不需要为每种语言开发一个边车。
  • 边车可以访问与主应用程序相同的资源。例如,边车可以监视边车和主应用程序使用的系统资源。
  • 由于它靠近主应用程序,因此在它们之间进行通信时没有明显的延迟。
  • 即使对于不提供可扩展性机制的应用程序,也可以使用边车通过将其作为自己的进程附加到与主应用程序相同的主机或子容器中来扩展功能

Sidecar模式通常与容器一起使用,并称为边车容器。

二、Sidecar 的实现

2.1 创建一个 springboot 项目

创建一个名为 06-other-service 的 springboot 项目,当作一个第三方的项目

编写其测试接口

@RestController
public class TestController {

    @GetMapping("list")
    public String list(){
        return "other-service:list";
    }

}

编写配置文件

server:
  port: 7001

2.2 创建一个 Maven 项目

创建一个名为 06-sidecar 的 Maven 子项目,用来实现 Sidecar。

2.3 编写导入相关依赖

<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-netflix-sidecar</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-netflix-eureka-client</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>

因为 Sidecar 要注册到 Eureka 上所以要导入 Eureka Client 的注解。

2.4 编写配置类

通过 @EnableSidecar 注解,来开启 Side 功能。

@SpringBootApplication
@EnableSidecar
public class SideCarApplication {
    public static void main(String[] args) {
        SpringApplication.run(SideCarApplication.class,args);
    }
}

2.5 编写配置文件

server:
  port: 81

#指定Eureka服务的地址
eureka:
  client:
    service-url:
      defaultZone: http://root:root@localhost:8761/eureka, http://root:root@localhost:8762/eureka


#指定服务的名称
spring:
  application:
    name: OTHER-SERVICE

# 指定所代理的服务的端口号
sidecar:
  port: 7001

Sidecar 只能代理本地的服务,所以不需要指定 ip只需要指定所代理的服务的端口号即可。

2.6 测试

在 Customer 中通过 Feign 的方式去调用此第三方服务。

2.6.1 编写 client

@FeignClient(value = "OTHER-SERVICE")
public interface OtherServiceClient {
    @RequestMapping("list")
    public String list();
}

2.6.2 编写 controller

//sideCar
@Autowired
private OtherServiceClient otherServiceClient;
@GetMapping("list")
public String list(){
    String list = otherServiceClient.list();
    return list;
}

到此这篇关于springCloud中的Sidecar多语言支持详解的文章就介绍到这了,更多相关Sidecar多语言支持内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java类加载机制、类加载器、自定义类加载器的案例

    java类加载机制、类加载器、自定义类加载器的案例

    这篇文章主要介绍了java类加载机制、类加载器、自定义类加载器的案例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02
  • SpringCloud配置动态更新原理解析

    SpringCloud配置动态更新原理解析

    在微服务架构的浩瀚星海中,服务配置的动态更新如同魔法一般,能够让应用在不重启的情况下,实时响应配置的变更,Spring Cloud作为微服务架构中的佼佼者,其动态配置更新的能力尤为引人注目,本文给大家介绍了SpringCloud配置动态更新原理,需要的朋友可以参考下
    2025-01-01
  • Spring事务管理零基础入门

    Spring事务管理零基础入门

    事务的作用就是为了保证用户的每一个操作都是可靠的,事务中的每一步操作都必须成功执行,只要有发生异常就 回退到事务开始未进行操作的状态。事务管理是Spring框架中最为常用的功能之一,我们在使用Spring Boot开发应用时,大部分情况下也都需要使用事务
    2022-10-10
  • 简单讲解在Java编程中实现设计模式中的单例模式结构

    简单讲解在Java编程中实现设计模式中的单例模式结构

    这篇文章主要介绍了简单讲解在Java编程中实现设计模式中的单例模式结构,设计模式是最基本直白简单的一种设计模式,需要的朋友可以参考下
    2016-04-04
  • 解析SpringSecurity+JWT认证流程实现

    解析SpringSecurity+JWT认证流程实现

    这篇文章主要介绍了解析SpringSecurity+JWT认证流程实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • 如何使用MAVEN打JAR包(直接使用)

    如何使用MAVEN打JAR包(直接使用)

    这篇文章主要介绍了如何使用MAVEN打JAR包(直接使用),文中通过实例代码介绍了maven 使用assembly插件进行打包的方法,需要的朋友可以参考下
    2023-03-03
  • springboot中的controller参数映射问题小结

    springboot中的controller参数映射问题小结

    这篇文章主要介绍了springboot中的controller参数映射问题小结,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧
    2024-12-12
  • java控制台版实现五子棋游戏

    java控制台版实现五子棋游戏

    这篇文章主要为大家详细介绍了java控制台版实现五子棋游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-12-12
  • SpringBoot项目中java -jar xxx.jar没有主清单属性的解决方法

    SpringBoot项目中java -jar xxx.jar没有主清单属性的解决方法

    这篇文章主要给大家介绍了SpringBoot项目中java -jar xxx.jar没有主清单的解决方法,文中通过代码示例给大家介绍的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2024-01-01
  • Runtime.getRuntime().exec 路径包含空格的解决

    Runtime.getRuntime().exec 路径包含空格的解决

    这篇文章主要介绍了Runtime.getRuntime().exec 路径包含空格的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11

最新评论