一、注册中心 Nacos
Alibaba Nacos,服务提供者和服务消费者将自己的信息注册到注册中心,注册中心通过心跳机制来确保每个服务都可以正常运行,服务消费者订阅注册中心,注册中心为服务消费者推送变更信息
1、功能
- 动态服务发现
- 配置管理
2、搭建
- 创建 nacos 所需要的数据库
- 在服务器创建 nacos 配置文件 custom.env,指定模式和连接 Mysql 相关信息
- 使用 docker 创建 nacos 镜像,指明配置文件
- 访问
ip:8848/nacos
,账号密码 nacos
3、服务注册
将服务注册到 Nacos 中,让它统一管理
- 服务中添加
spring-cloud-starter-alibaba-nacos-discovery
的依赖 - 服务中添加 Nacos 配置,改服务端口其他配置相同会自动变成集群
spring:application:name: item-service # 服务名称cloud:nacos:server-addr: 192.168.150.101:8848 # nacos地址
4、服务发现
在一个服务中得到已经注册的其他服务的信息
- 服务中添加
spring-cloud-starter-alibaba-nacos-discovery
的依赖 - 自动注入 DiscoveryClient,使用
List<ServiceInstance> instance = discoveryClient.getInstances("服务名称")
得到实例列表,然后通过ServiceInstance instance = instances.get(RandomUtil.randomInt(instances.size()));
随机得到一个服务对象,就可以使用此对象获得相关信息,如:instance.getUri()
获得服务的地址
二、远程调用 OpenFeign
Spring Cloud OpenFeign,是一个声明式的 http 客户端,是 SpringCloud 在 Eureka 公司开源的 Feign 基础上改造而来。基于 SpringMVC 的常见注解,优雅的实现 http 请求的发送
1、基础使用
- 服务中添加
spring-cloud-starter-openfeign
,spring-cloud-starter-loadbalancer
依赖 - 在启动类上添加
@EnableFeignclients
注解来开启远程调用 - 编写 OpenFeign 客户端:@FeignClient 指定要请求的服务列表;@GetMapping 指定请求方式和请求路径;方法参数指定请求参数;方法返回值指定返回后封装的类型
// 3. 编写 OpenFeign 客户端
// 向 http://item-service/items 发送一个 GET 请求,携带 ids 为请求参数,并自动将返回值处理为 List<ItemDTO>
@FeignClient("item-service")
public interface ItemClient {@GetMapping("/items")List<ItemDTO> queryItemByIds(@RequestParam("ids") Collection<Long> ids);
}
2、开启连接池
Feign 底层默认 HttpURLConnection 实现,不支持连接池,为了更好的性能,通常使用支持连接池的实现 OKHttp、Apache HttpClient
使用
- 引入
feign-okhttp
依赖 - 在配置文件中配置:
feign:okhttp:enabled: true
# 开启 OKHttp 功能
3、最佳实践
项目中一般是将所有的远程调用封装到一个模块中,然后让其他服务引入这个模块,但是可能会出现注解扫描不到的情况,所以要在启动类的注解上添加
@EnableFeignclients(basePackages = "远程调用模块的包路径")
4、输出日志
OpenFeign 只会在 FeignClient 所在包的日志级别为 DEBUG 时,