小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
上文我们把我们项目注册到服务器上了,但是在微服务中,我们会有多个服务,同时也会使用A服务调用B服务的接口。springcloud netflix这里有两种方式ribbon和feign,我们分别介绍。
1.ribbon
ribbon说白了就是使用restTemplate。上文编写了被调用方的代码,下文将编写调用方的代码。
1.修改pom文件
1 | js复制代码<?xml version="1.0" encoding="UTF-8"?> |
2.修改Application
然后修改EurekaConsumerApplication类,需要在新建RestTemplate的bean。
1 | js复制代码import org.springframework.boot.SpringApplication; |
3.新建调用方接口DcController
新建普通接口,调用上文被调用方的服务。
1 | js复制代码import org.springframework.beans.factory.annotation.Autowired; |
有一个坑 在调用时候需要String url = “http://eureka-client/aaa/dc?dk=3001”,而不是String url =”http://localhost:2002/aaa/dc?dk=3001”,否则会报错java.lang.IllegalStateException: No instances available for localhost.
4.修改application
最后是配置文件application.yml,这里我们使用.yml文件,都是基础配置。
1 | js复制代码eureka: |
输入http://localhost:3001/eureka1/consumer 就可以调用到上文的client服务了,同时还可以配置负载均衡策略。在NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule 处配置。
2.feign
1.修改pom文件
1 | js复制代码<?xml version="1.0" encoding="UTF-8"?> |
版本问题一定要控制!!!!这里有一个坑 就是版本问题,有时会报错
1 | js复制代码org.springframework.beans.factory.BeanDefinitionStoreException: Failed to read candidate component class: file [F:\workspace\springcloud\tse9\eureka-consumer-feign\target\classes\com\cloud\DcClient.class]; nested exception is org.springframework.core.annotation.AnnotationConfigurationException: Attribute 'value' in annotation [org.springframework.cloud.netflix.feign.FeignClient] must be declared as an @AliasFor 'serviceId', not 'name'. |
解决办法可以参考:www.pianshen.com/article/223…
2.修改EurekaConsumerFeignApplication
首先在EurekaConsumerFeignApplication使用@EnableFeignClients中开启feign
1 | js复制代码import org.springframework.boot.SpringApplication; |
3.新建接口DcClient
新建一个接口DcClient,配置调用其他服务的名称和接口名称。(被调用方客户端的服务与接口信息)
1 | js复制代码import org.springframework.cloud.openfeign.FeignClient; |
4.新建调用接口DcController
业务接口的书写,同时注入dcClient调用其他服务。
1 | js复制代码import org.springframework.beans.factory.annotation.Autowired; |
5.修改application.properties
下文是最基础的配置。
1 | js复制代码spring.application.name=eureka-consumer-feign |
然后调用http://localhost:3002/eureka2/consumer 可以发现接口掉通了 ,在被调用方也有相应的日志。
3.ribbon和Eureka整合原理
基本流程就是 客户端从eureka中获取到缓存的服务列表,获取到目的服务的信息,然后通过自身的负载均衡策略,去调用对应的服务。
1.负载均衡策略
- BestAvailableRule 选择一个最小的并发请求的server。
- AvailabilityFilteringRule 过滤掉那些因为一直连接失败的被标记为circuit tripped的后端server,并过滤掉那些高并发的的后端server(active connections 超过配置的阈值)。
- WeightedResponseTimeRule 根据响应时间分配一个weight,响应时间越长,weight越小,被选中的可能性越低。
- RetryRule 对选定的负载均衡策略机上重试机制。
- RoundRobinRule roundRobin方式轮询选择server.。
- RandomRule 随机选择一个server。
- ZoneAvoidanceRule 复合判断server所在区域的性能和server的可用性选择server。
本文转载自: 掘金