Spring服务发现、动态路由、断路器

服务发现

  • 服务发现是Eureka的服务器,引入这个服务,在Application上加入 @EnableEurekaServer即可,无需任何其他操作。
  • 每个服务配置一个application name,方便区分。
  • 多个可以构建成集群,相互注册。
spring:
  application:
    name: eureka1-server
  profiles: first
server:
  port: 9001
eureka:
  instance:
    hostname: eureka1
  client:
    register-with-eureka: true
    fetch-registry: true
    service-url:
      defaultZone: http://eureka2:9002/eureka/,http://eureka3:9003/eureka/

服务器注册

  • 注册只要在Application上加上 @EnableDiscoveryClient即可
  • 同样需要一个ApplicationName
  • 需要指明有哪些euraka注册服务器可用
eureka:
  client:
    service-url:
      defaultZone: http://eureka1:9001/eureka/,http://eureka2:9002/eureka/,http://eureka3:9003/eureka/

动态路由

  • 使用动态路由,原因是前面调用方,并不想知道哪些具体的服务可用,对调用方来说最好一个地址就可以。
  • 动态路由类似Nginx的作用,对服务进行反向代理。
  • Zuul可以根据url配置哪些url使用哪些服务,而这些服务可以是eureka上的服务,这样就实现了动态路由。
  • Application加上@EnableZuulProxy即可
  • 配置路由规则
#route test1
zuul.routes.test1.path=/test1/**
zuul.routes.test1.serviceId=TEST1

也可以用

zuul.routes.test1.url=http://localhost

我倾向于用前者,这样可以利用eureka的动态服务表
* 使用eureka服务获取服务列表

eureka.client.service-url.defaultZone=http://eureka1:9001/eureka/,http://eureka2:9002/eureka/,http://eureka3:9003/eureka/
  • 这里有个小问题,服务注册到eureka上后,名称都变成了大写,在zuul里面的serviceId也必须大写,否则找不到

  • 很显然,zuul可以配置多个实现负载均衡和故障转移。

  • zuul的可用性也是个问题。如果有高可用的负载均衡器,可以在前面放一个,调用方访问负载均衡器,这样一个zuul挂了就自动故障迁移了。比如一些云服务提供的SLB

断路器

  • 可以在服务不可用或者延迟很大的时候,直接fail,避免系统雪崩。
  • 可以用在远程调用上,也可以用在普通方法上。
  • @FeignClient直接支持断路器
  • @HystrixCommand 标注一个断路器

FeignClient

注解式的远程REST调用,把调用转换成一个接口,而不是RestTemplate调用。
* 注解式声明REST调用
* 直接和Eureka Server接通,调用上面的服务。
* 支持断路器
* @EnableEurekaClient 从Eureka上获取服务列表
* @EnableFeignClients 支持FeigeClients
* @FeignClient(value = “test1”,fallback = TestClientFallback.class) 支持Fallback
* Java调用REST,首选用FeignClient
* 其他程序比如php,通过zuul调用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值