【微服务核心笔记】

发布时间:2023年12月29日

一、注册中心 Nacos

Alibaba Nacos,服务提供者和服务消费者将自己的信息注册到注册中心,注册中心通过心跳机制来确保每个服务都可以正常运行,服务消费者订阅注册中心,注册中心为服务消费者推送变更信息

1、功能

  • 动态服务发现
  • 配置管理

2、搭建

  1. 创建 nacos 所需要的数据库
  2. 在服务器创建 nacos 配置文件 custom.env,指定模式和连接 Mysql 相关信息
  3. 使用 docker 创建 nacos 镜像,指明配置文件
  4. 访问 ip:8848/nacos,账号密码 nacos

3、服务注册

将服务注册到 Nacos 中,让它统一管理

  1. 服务中添加 spring-cloud-starter-alibaba-nacos-discovery 的依赖
  2. 服务中添加 Nacos 配置,改服务端口其他配置相同会自动变成集群
spring:
  application:
    name: item-service # 服务名称
  cloud:
    nacos:
      server-addr: 192.168.150.101:8848 # nacos地址

4、服务发现

在一个服务中得到已经注册的其他服务的信息

  1. 服务中添加 spring-cloud-starter-alibaba-nacos-discovery 的依赖
  2. 自动注入 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、基础使用

  1. 服务中添加 spring-cloud-starter-openfeignspring-cloud-starter-loadbalancer 依赖
  2. 在启动类上添加 @EnableFeignclients 注解来开启远程调用
  3. 编写 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

使用

  1. 引入 feign-okhttp 依赖
  2. 在配置文件中配置:feign:okhttp:enabled: true # 开启 OKHttp 功能

3、最佳实践

项目中一般是将所有的远程调用封装到一个模块中,然后让其他服务引入这个模块,但是可能会出现注解扫描不到的情况,所以要在启动类的注解上添加 @EnableFeignclients(basePackages = "远程调用模块的包路径")

4、输出日志

OpenFeign 只会在 FeignClient 所在包的日志级别为 DEBUG 时,

文章来源:https://blog.csdn.net/qq_46023503/article/details/135293367
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。