项目背景
前端使用nginx,数据库mysql,微服务使用阿里云的nacos。
nacos
在虚拟机用docker部署nacos
(配置过程可查看 docker部署nacos)
部署成功后,正常点开是这个页面
在部署成功了之后, 直接在各个微服务下面导入nacos的依赖
<!--nacos 服务注册发现-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
导入之后在配置中配置nacos地址
spring:
application:
name: item-service # 服务名称
cloud:
nacos:
server-addr: 192.168.204.129:8848 # nacos地址 也就是你自己的虚拟机地址
这时候直接启动微服务程序,访问nacos控制台就可以看到我们的分布式微服务在nacos注册中心中就有服务了
这时候吧所有的微服务可以都按上面的步骤进行一遍,使其都在注册中心注册。
这时候可以给添加负载均衡和openFeign来更方便的去进行微服务的调用,不然就要进行如下繁琐的操作。
openFeign和负载均衡的启用来便捷调用微服务
第一步 导入依赖
<!--openFeign-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<!--负载均衡器-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
第二步 添加@EnableFeignClients注释启用openFeign
openFeign在导入后还要在启动类上添加@EnableFeignClients注释来启用,
第三部 定义新接口,编写Feign客户端
@FeignClient("item-service")
public interface ItemClient {
@GetMapping("/items")
List<ItemDTO> queryItemByIds(@RequestParam("ids") Collection<Long> ids);
}
这里只需要声明接口,无需实现方法。这边要注意,我们这边去使用@FeignClient注解,去声明自己要用到的服务名称,这个注解还实现了服装均衡,错误处理,服务调用等功能。
@GetMapping就是声明自己要请求的方式,然后@RequeParam是请求参数。
接下来我们就可以直接调用服务了
Feign底层发起http请求时,默认使用URLConnection发起http请求,不支持连接池操作,那么为了提高Feign的性能,可以采用的手段是使用连接池代替默认的URLConnection
支持连接池的http客户端 Apache HttpClient、 OKHttp
开启连接池
第一步先导入依赖
<!--OK http 的依赖 -->
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-okhttp</artifactId>
</dependency>
然后在配置文件中配置相关参数
feign:
okhttp:
enabled: true # 开启OKHttp功能
重启服务就生效了。
可以通过打断点验证连接池是否生效,在org.springframework.cloud.openfeign.loadbalancer.FeignBlockingLoadBalancerClient
中的execute
方法中打断点:
底层的对象就变成了OkHttpClient