今天开始做spring cloud netFlix的Demo
一。
一开始就遇到了一个小小的问题,我发现我注入User对象的时候注入不了。
我就开始疑惑,后来发现自己真是个笨比,没有加注解当然注入不进去。随后就给User对象加了一个@component 注解。
还有几个月没写代码了,很多东西都忘了,就记录一下吧。在User上加@Data 就可以不用写 hashcode tostring getset 方法了。@AllargsConstructor @NoargsConstructor
不用写构造器方法。
二。
我之前写微服务的项目时,服务之间的调用 都是用的openfeign,所以看到这个方法还有点新奇,想记录下来。也就是RestTemplate,它可以直接调用其他服务,零配置。
我这里是把他写在 启动类里面的,然后需要用到就@autowired。以下图片是它的用法
写在启动类里
注入并使用,这里是订单服务调用用户服务
三。
集成ribbon 实现随机算法进行调用
先给user服务做一个集群
然后在UserController 写下port 方便我们查看调用的是哪个接口
给 order 服务加上 ribbon依赖
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-ribbon</artifactId> </dependency> </dependencies> </project>
给RestTemplate加上 @Loadbalanced注解,让它能搞负载均衡调用,再写一个负载均衡算法,这里写的是随机算法
最后别忘了用RestTemplate调用的url不要用 端口号,要使用服务名调用。
完成!
四 集成openfeign 果然还是openfeign方便很多
先导对应的依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
在启动类加上注解@EnableFeignClients
写上对应的feign接口
理解Feign的工作原理(重要)
要使用Feign,我们除了导入依赖之外,需要主配置类通过@EnableFeignClients(value="")
注解开启Feign,也可以通过value属性指定了Feign的扫描包。同时我们需要为Feign编写客户端接口,接口上需要注解@FeignClient
标签。 当程序启动,注解了@FeignClient的接口将会被扫描到然后交给Spring管理
。
当请求发起,会使用jdk的动态代理方式代理接口,生成相应的RequestTemplate
,Feign会为每个方法生成一个RequestTemplate同时封装好http信息,如:url,请求参数等等
最终RequestTemplate生成request请求,交给Http客户端
(UrlConnection ,HttpClient,OkHttp)。然后Http客户端会交给LoadBalancerClient,使用Ribbon的负载均衡发起调用。