springCloud 服务间的通信方式有两种
服务端–商品服务
客户端–订单服务
RestTemplate 方式
第一种方式![image-20200702192252669](https://imgconvert.csdnimg.cn/aHR0cDovL3FmZGNyYTM2OC5obi1ia3QuY2xvdWRkbi5jb20vaW1hZ2UtMjAyMDA3MDIxOTIyNTI2NjkucG5n?x-oss-process=image/format,png)
缺点:URL固定写死了
1、当注册中心有很多服务时,我们可能不知道我们需要的服务由谁提供,无法获取对方IP,因此就可能无法调用到服务。
2、实际业务场景中,并发量大,需要部署多台服务器, “localhost:9080/getMsg,localhost:9081/getMsg “,那么此时就需要负载均衡用户具体使用哪台服务器是不知道的
第二种方式
通过 LoadBalancerClient 来获取应用名,进而获取地址和端口,在格式化拼接地址,从而调用 product服务
缺点:是每次调用服务都要这样写,拼接URL字符串,编码很麻烦。
第三种方式
新建一个config类,配置RestTemplate的Bean,并加上@LoadBalanced注解。
在客户端ClientController中,利用@LoadBalanced可在restTemplate里使用应用名字
使用 Feign 的方式进行通信
- 声明式 REST客户端(伪 RPC)
- 采用了基于接口的注解
完整错误:Failed to introspect Class [org.springframework.cloud.openfeign.ribbon.FeignRibbonClientAutoConfiguration] from ClassLoader
不能加载 FeignRibbonClientAutoConfiguration
错误原因:
全局变量:SpringBootVersion 和springCloudVersion在Feign兼容方面有问题
<dependency>`
<groupId>org.springframework.cloud</groupId>`
<artifactId>spring-cloud-starter-openfeign</artifactId>`
<version>2.0.0.M6</version>`
</dependency>`