Alibaba Nacos,服务提供者和服务消费者将自己的信息注册到注册中心,注册中心通过心跳机制来确保每个服务都可以正常运行,服务消费者订阅注册中心,注册中心为服务消费者推送变更信息
ip:8848/nacos
,账号密码 nacos将服务注册到 Nacos 中,让它统一管理
spring-cloud-starter-alibaba-nacos-discovery
的依赖spring:
application:
name: item-service # 服务名称
cloud:
nacos:
server-addr: 192.168.150.101:8848 # nacos地址
在一个服务中得到已经注册的其他服务的信息
spring-cloud-starter-alibaba-nacos-discovery
的依赖List<ServiceInstance> instance = discoveryClient.getInstances("服务名称")
得到实例列表,然后通过 ServiceInstance instance = instances.get(RandomUtil.randomInt(instances.size()));
随机得到一个服务对象,就可以使用此对象获得相关信息,如:instance.getUri()
获得服务的地址Spring Cloud OpenFeign,是一个声明式的 http 客户端,是 SpringCloud 在 Eureka 公司开源的 Feign 基础上改造而来。基于 SpringMVC 的常见注解,优雅的实现 http 请求的发送
spring-cloud-starter-openfeign
,spring-cloud-starter-loadbalancer
依赖@EnableFeignclients
注解来开启远程调用// 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);
}
Feign 底层默认 HttpURLConnection 实现,不支持连接池,为了更好的性能,通常使用支持连接池的实现 OKHttp、Apache HttpClient
feign-okhttp
依赖feign:okhttp:enabled: true
# 开启 OKHttp 功能项目中一般是将所有的远程调用封装到一个模块中,然后让其他服务引入这个模块,但是可能会出现注解扫描不到的情况,所以要在启动类的注解上添加
@EnableFeignclients(basePackages = "远程调用模块的包路径")
OpenFeign 只会在 FeignClient 所在包的日志级别为 DEBUG 时,