本文概览:介绍了DiscoveryClientSpring cloud增强版的spring RestTemplatefeign三种模式

1 服务查找介绍

存在DiscoveryClient Spring Cloud增强版的 RestTemplateNetflixFeign三种方式

(1)DiscoveryClient  不支持ribbon,只能获取一个服务列表,所以只能自己做负载均衡。

(2)spring cloud增强版的restTemplate,它支持ribbon,必须使用@Loadbalancer

  • 使用了ribbon,支持负载均衡
  • URL中不需要具体的Ip了,只需要一个appId就可以了;

(3)Netflix feign

相比spring cloud增强版的restTemplate,Netflix Feign更节省代码,只需要一个接口就声明就可以了。

总结,上面三种方式实际执行步骤是类似的,如下

  • 第一步 查询服务的所有IP
  • 第二步 负载均衡,选择一个IP
  • 第三步 通过RestTemplate调用

2 discoveryClient

1、使用@EnableDiscoveryClient标识在应用中引入discoveryClient

2、使用DiscoveryClient调用下游服务。对于下游服务中/query的接口,可以参考附录。

3、测试

4、执行结果

1

3 SpringCloud增强版RestTemplate

1、使用@LoadBalanced,如下代码,标识Spring RestTemplate可以使用ribbon。

2、使用增强版的RestTemplate。

与DiscoveryClient的区别在于:

  • 使用了ribbon,支持负载均衡
  • URL中不需要具体的Ip了,只需要一个appId就可以了;

对于下游服务中/query的接口,可以参考附录。

3、测试

4、执行结果

2

4 Netflix Feign

4.1 实例

1、maven依赖

2、使用@EnableFeignClients

3、添加@FeignClient,调用外部服务,对于下游服务中/query的接口,可以参考附录。

如果通过网关访问某一个微服务可以通过如下

4、测试

5、执行结果为

3

4.2 相关问题

1、问题NoClassDefFoundError: feign/Feign$Builder。

(1)添加依赖

(2)添加basePackages

附1 对于下游服务中/query的接口

附2 相关配置

上面三种方式对应的配置和部署eureka的客户端一样,如下

参考:

Spring Cloud服务注册-Eureka介绍和部署

分类&标签