Spring Cloud常用组件及其配置

一、Eureka(服务注册与发现)

  1. Eureka Server配置

    • application.yml配置示例
      server:
        port: 8761
      eureka:
        instance:
          hostname: localhost
        client:
          register-with-eureka: false
          fetch-registry: false
      
    • 解释:
      • server.port:指定Eureka Server运行的端口,这里是8761。
      • eureka.instance.hostname:设置Eureka Server的主机名。
      • eureka.client.register-with-eureka:设置为false,表示Eureka Server自身不需要注册到Eureka服务中。
      • eureka.client.fetch-registry:设置为false,表示Eureka Server不需要从其他Eureka Server获取注册信息。
  2. Eureka Client配置(服务提供者)

    • application.yml配置示例
      spring:
        application:
          name: service-provider
      eureka:
        client:
          service-url:
            defaultZone: http://localhost:8761/eureka/
        instance:
          prefer-ip-address: true
      
    • 解释:
      • spring.application.name:定义服务名称,用于在Eureka中注册和识别。
      • eureka.client.service-url.defaultZone:指定Eureka Server的地址,服务提供者将自己的信息注册到这个地址对应的Eureka Server。
      • eureka.instance.prefer-ip-address:设置为true,使得服务实例在注册时优先使用IP地址而不是主机名。
  3. Eureka Client配置(服务消费者)

    • 配置和服务提供者类似,也是通过eureka.client.service-url.defaultZone指定Eureka Server地址来发现服务。例如:
    • application.yml配置示例
      spring:
        application:
          name: service-consumer
      eureka:
        client:
          service-url:
            defaultZone: http://localhost:8761/eureka/
      

二、Ribbon(客户端负载均衡)

  1. 基本配置(在服务消费者中)
    • application.yml配置示例
      ribbon:
        ReadTimeout: 5000
        ConnectTimeout: 3000
      
    • 解释:
      • ribbon.ReadTimeout:设置读取数据的超时时间,单位是毫秒,这里是5000毫秒。
      • ribbon.ConnectTimeout:设置连接服务的超时时间,单位是毫秒,这里是3000毫秒。
  2. 自定义负载均衡策略配置
    • application.yml配置示例
      service-provider:
        ribbon:
          NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
      
    • 解释:
      • service-provider:是要应用负载均衡策略的服务名称。
      • ribbon.NFLoadBalancerRuleClassName:指定负载均衡规则类,这里是RandomRule,表示使用随机负载均衡策略。

三、Feign(声明式REST客户端)

  1. 启用Feign和基本配置
    • application.yml配置示例
      feign:
        client:
          config:
            default:
              connectTimeout: 5000
              readTimeout: 5000
      
    • 解释:
      • feign.client.config.default.connectTimeout:设置Feign客户端连接超时时间,单位是毫秒。
      • feign.client.config.default.readTimeout:设置Feign客户端读取超时时间,单位是毫秒。
  2. 自定义Feign拦截器配置
    • 创建一个拦截器类实现RequestInterceptor接口。
    • application.yml配置示例(添加拦截器)
      feign:
        client:
          config:
            default:
              requestInterceptors:
                - com.example.MyFeignInterceptor
      
    • 解释:
      • feign.client.config.default.requestInterceptors:配置一个或多个Feign拦截器,这里添加了自定义的MyFeignInterceptor,可以用于在请求发送前添加请求头、修改请求参数等操作。

四、Hystrix(断路器)

  1. 启用Hystrix和基本配置(在服务消费者中)
    • application.yml配置示例
      hystrix:
        command:
          default:
            execution:
              isolation:
                thread:
                  timeoutInMilliseconds: 5000
      
    • 解释:
      • hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds:设置Hystrix命令的超时时间,单位是毫秒。如果服务调用超过这个时间,Hystrix会触发熔断机制。
  2. Hystrix Dashboard配置(用于监控)
    • application.yml配置示例(Hystrix Dashboard服务)
      server:
        port: 9001
      spring:
        application:
          name: hystrix-dashboard
      hystrix:
        dashboard:
          proxy-stream-allow-list: "localhost"
      
    • 解释:
      • server.port:指定Hystrix Dashboard服务运行的端口。
      • hystrix.dashboard.proxy-stream-allow-list:设置允许访问Hystrix监控数据的主机列表,这里只允许本地访问。

五、Zuul(API网关)

  1. 基本配置

    • application.yml配置示例
      server:
        port: 8080
      zuul:
        routes:
          service-provider:
            path: /provider/**
            service-id: service-provider
      
    • 解释:
      • server.port:指定Zuul网关服务运行的端口。
      • zuul.routes.service-provider.path:定义路由规则,所有以/provider/开头的请求都会被路由。
      • zuul.routes.service-provider.service-id:指定请求被路由到的服务名称,这里是service-provider
  2. Zuul过滤器配置(自定义过滤器)

    • 创建一个自定义过滤器类,继承自ZuulFilter
    • application.yml配置示例(添加过滤器)
      zuul:
        filters:
          my-custom-filter:
            pre:
              order: 1
              disable: false
      
    • 解释:
      • zuul.filters.my-custom-filter:定义一个自定义过滤器名称。
      • zuul.filters.my-custom-filter.pre.order:指定过滤器的执行顺序,数字越小越先执行。
      • zuul.filters.my-custom-filter.pre.disable:设置是否禁用该过滤器,false表示启用。
  3. Zuul的安全配置(例如添加认证)

    • 可以结合Spring Security等安全框架进行配置。假设使用JWT认证,在application.yml中配置:
    • application.yml配置示例
      zuul:
        sensitive-headers:
          - Cookie,Set-Cookie
      
    • 解释:
      • zuul.sensitive-headers:设置敏感头信息,这里过滤掉CookieSet-Cookie头,以增强安全性。可以在过滤器中添加JWT验证逻辑来确保请求的合法性。

六、Config(分布式配置中心)

  1. Config Server配置
    • application.yml配置示例
      server:
        port: 8888
      spring:
        cloud:
          config:
            server:
              git:
                uri: https://github.com/your-repo-name/your-config-repo.git
                search-paths: config-files-directory
      
    • 解释:
      • server.port:指定Config Server运行的端口。
      • spring.cloud.config.server.git.uri:配置配置文件所在的Git仓库地址。
      • spring.cloud.config.server.git.search-paths:在Git仓库中搜索配置文件的目录路径。
  2. Config Client配置(服务获取配置)
    • application.yml配置示例
      spring:
        cloud:
          config:
            uri: http://localhost:8888
            name: your-config-file-name
            profile: dev
      
    • 解释:
      • spring.cloud.config.uri:指定Config Server的地址,客户端从这里获取配置。
      • spring.cloud.config.name:配置文件名(不包括文件扩展名)。
      • spring.cloud.config.profile:配置文件的环境配置,如dev(开发环境)、prod(生产环境)等。

这只是Spring Cloud部分组件的一些典型配置,实际上还有很多其他可配置的选项和组件组合方式,并且配置会根据具体的业务场景和需求进行调整。以下是一些其他组件的简单提及:

七、Sleuth(分布式链路追踪)

  1. 基本配置
    • application.yml配置示例
      spring:
        sleuth:
          sampler:
            probability: 1.0
      
    • 解释:
      • spring.sleuth.sampler.probability:设置链路追踪的采样率,取值范围是0.0 - 1.0,这里设置为1.0表示对所有请求进行链路追踪。

八、Stream(消息驱动)

  1. 配置示例(以Kafka为例)
    • application.yml配置示例
      spring:
        cloud:
          stream:
            kafka:
              binder:
                brokers: localhost:9092
            bindings:
              my-input-channel:
                destination: my-kafka-topic
                content-type: application/json
      
    • 解释:
      • spring.cloud.stream.kafka.binder.brokers:指定Kafka服务器的地址。
      • spring.cloud.stream.bindings.my-input-channel.destination:定义消息通道对应的Kafka主题。
      • spring.cloud.stream.bindings.my-input-channel.content-type:设置消息的内容类型。
posted @ 2024-12-18 15:27  软件职业规划  阅读(16)  评论(0编辑  收藏  举报