前面我们用zuul解决了路由器和过滤器问题,接下来就是服务之间的相互通讯问题了,虽然用url可以处理,但是这样终究还是不方便的,下次修改地址又要改对应的配置文件所以有了feign
声明性REST客户端:Feign
Feign是一个声明式的Web服务客户端。这使得Web服务客户端的写入更加方便 要使用Feign创建一个界面并对其进行注释。它具有可插入注释支持,包括Feign注释和JAX-RS注释。Feign还支持可插拔编码器和解码器。Spring Cloud增加了对Spring MVC注释的支持,并使用Spring Web中默认使用的HttpMessageConverters。Spring Cloud集成Ribbon和Eureka以在使用Feign时提供负载均衡的http客户端。
如何加入feign呢?
1、老规矩引入依赖
org.springframework.cloud
spring-cloud-starter-openfeign
2、然后启动类加上标签
@EnableFeignClients
3、加上配置
#feign设置
feign:
client:
config:
default: #服务名,default为所有服务,这里配置的超时时间是feign的
connectTimeout: 10000
readTimeout: 12000
hystrix:
enabled: true #启用hystrix,为true开启熔断机制以及降级机制
我们的feign是支持熔断的只要创建对应的熔断类就行了
接下来就是编写一个FeignClient
value是我们的serviceId
fallback就是熔断类了,可以自定义调用接口失败的时候返回的默认数据
注:我们的FeignClient类的参数方法名必须和服务提供的方法名参数一样,下面是服务接口
这样简单的服务间的通讯就解决了。
#hystrix设置
hystrix:
command:
default:
execution:
isolation:
thread:
timeoutInMilliseconds: 10000 #这里配置的超时时间是hystrix的,具体顺序是feign调用hystrix,hystrix调用ribbon
这一个必须设置,因为 hystrix默认是一秒钟,所以调用的时候可能会出现问题,这里设置长一点
客户端负载平衡器:Ribbon
Ribbon是一个客户端负载均衡器,它可以很好地控制HTTP和TCP客户端的行为。Feign已经使用Ribbon,所以如果您使用@FeignClient,则本节也适用。
Ribbon中的中心概念是指定客户端的概念。每个负载平衡器是组合的组合的一部分,它们一起工作以根据需要联系远程服务器,并且集合具有您将其作为应用程序开发人员(例如使用@FeignClient注释)的名称。Spring Cloud使用RibbonClientConfiguration为每个命名的客户端根据需要创建一个新的合奏作为ApplicationContext。这包含(除其他外)ILoadBalancer,RestClient和ServerListFilter。
如何加入ribbon?
1、加依赖
org.springframework.cloud
spring-cloud-starter-ribbon
2.注解就不需要了
3.配置
#ribbon设置
spring-cloud-service1:
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
这是通过配置的方法,也可以自定义类,格式:
serviceId:
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
这里采用的规则是随机,还可以用 轮询等规则,具体根据自己需要,这里面其实提供了很多种规则:
1) 轮询
2)随机
3)一致性哈希
4)哈希
5)加权
这样就实现了熔断,客户端负载均衡,服务间的调用。其实springcloud还有很多其他的组件,config等,这里就不写了,本次springcloud到此结束,简单的demo完成
代码:https://gitee.com/wangzaiwork/spring-cloud-demo.git
------------------写的不好,仅供参考