Spring Cloud常用组件及其配置
一、Eureka(服务注册与发现)
-
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获取注册信息。
-
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地址而不是主机名。
-
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(客户端负载均衡)
- 基本配置(在服务消费者中)
application.yml
配置示例:ribbon: ReadTimeout: 5000 ConnectTimeout: 3000
- 解释:
ribbon.ReadTimeout
:设置读取数据的超时时间,单位是毫秒,这里是5000毫秒。ribbon.ConnectTimeout
:设置连接服务的超时时间,单位是毫秒,这里是3000毫秒。
- 自定义负载均衡策略配置
application.yml
配置示例:service-provider: ribbon: NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
- 解释:
service-provider
:是要应用负载均衡策略的服务名称。ribbon.NFLoadBalancerRuleClassName
:指定负载均衡规则类,这里是RandomRule
,表示使用随机负载均衡策略。
三、Feign(声明式REST客户端)
- 启用Feign和基本配置
application.yml
配置示例:feign: client: config: default: connectTimeout: 5000 readTimeout: 5000
- 解释:
feign.client.config.default.connectTimeout
:设置Feign客户端连接超时时间,单位是毫秒。feign.client.config.default.readTimeout
:设置Feign客户端读取超时时间,单位是毫秒。
- 自定义Feign拦截器配置
- 创建一个拦截器类实现
RequestInterceptor
接口。 application.yml
配置示例(添加拦截器):feign: client: config: default: requestInterceptors: - com.example.MyFeignInterceptor
- 解释:
feign.client.config.default.requestInterceptors
:配置一个或多个Feign拦截器,这里添加了自定义的MyFeignInterceptor
,可以用于在请求发送前添加请求头、修改请求参数等操作。
- 创建一个拦截器类实现
四、Hystrix(断路器)
- 启用Hystrix和基本配置(在服务消费者中)
application.yml
配置示例:hystrix: command: default: execution: isolation: thread: timeoutInMilliseconds: 5000
- 解释:
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds
:设置Hystrix命令的超时时间,单位是毫秒。如果服务调用超过这个时间,Hystrix会触发熔断机制。
- 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网关)
-
基本配置
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
。
-
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表示启用。
- 创建一个自定义过滤器类,继承自
-
Zuul的安全配置(例如添加认证)
- 可以结合Spring Security等安全框架进行配置。假设使用JWT认证,在
application.yml
中配置: application.yml
配置示例:zuul: sensitive-headers: - Cookie,Set-Cookie
- 解释:
zuul.sensitive-headers
:设置敏感头信息,这里过滤掉Cookie
和Set-Cookie
头,以增强安全性。可以在过滤器中添加JWT验证逻辑来确保请求的合法性。
- 可以结合Spring Security等安全框架进行配置。假设使用JWT认证,在
六、Config(分布式配置中心)
- 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仓库中搜索配置文件的目录路径。
- 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(分布式链路追踪)
- 基本配置
application.yml
配置示例:spring: sleuth: sampler: probability: 1.0
- 解释:
spring.sleuth.sampler.probability
:设置链路追踪的采样率,取值范围是0.0 - 1.0,这里设置为1.0表示对所有请求进行链路追踪。
八、Stream(消息驱动)
- 配置示例(以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
:设置消息的内容类型。