简介 Nacos 注册中心

2.1 注册中心原理

image-20250416145515322.png

2.2 Nacos——SpringAlibaba

2.2.1 nacos 的安装与配置(docker 环境)

nacos 需要存储一定的数据,提前创建好数据库

在docker系统中安装 nacos 服务,需要提前配置好数据库相关信息并挂载

nacos 配置文件 custom.env

env
复制代码
PREFER_HOST_MODE=hostname MODE=standalone SPRING_DATASOURCE_PLATFORM=mysql MYSQL_SERVICE_HOST=192.168.117.129 MYSQL_SERVICE_DB_NAME=nacos MYSQL_SERVICE_PORT=3306 MYSQL_SERVICE_USER=root MYSQL_SERVICE_PASSWORD=123 MYSQL_SERVICE_DB_PARAM=characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai

dockers 下载并安装命令

bash
复制代码
docker run -d \ --name nacos \ --env-file ./nacos/custom.env \ -p 8848:8848 \ -p 9848:9848 \ -p 9849:9849 \ --restart=always \ nacos/nacos-server:v2.1.0-slim
2.2.2 服务注册

注册步骤

  1. 引入依赖

    xml
    复制代码
    <!--nacos 服务注册发现--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency>
  2. 配置 nacos 地址

    yaml
    复制代码
    spring: application: name: item-service # 服务名称 cloud: nacos: server-addr: 192.168.150.101:8848 # nacos地址
  3. 在 SpringBoot 的启动类中添加注解 @EnableDiscoveryClient,开启 nacos 服务发现功能

    java
    复制代码
    @SpringBootApplication @EnableDiscoveryClient public class ItemApplication { public static void main(String[] args) { SpringApplication.run(ItemApplication.class, args); } }
2.2.3 DiscoveryClient 调用 Http 请求
  1. 创建对象

    java
    复制代码
    //注册 DiscoveryClient 对象,该对象是 nacos 包中定义好的,直接引用即可 private final DiscoveryClient discoveryClient; // 根据注册服务名称,获取注册列表 List<ServiceInstance> instances = discoveryClient.getInstances("item-service"); //手动实现负载均衡,并选择访问哪个实例服务 ServiceInstance instance = instances.get(RandomUtil.randomInt(instances.size()));
  2. 远程调用

    java
    复制代码
    // 由于不知道访问具体哪一台服务器,所以请求中的路径要动态获取 ResponseEntity<List<ItemDTO>> response = restTemplate.exchange( instance.getUri()+"/items?ids={ids}", HttpMethod.GET, …… );

2.3 OpenFeign

OpenFeign 用于简化传统跨服务调用(Nacos+DiscoveryClient 远程调用),通过==接口化方式+代理+反射==实现Http 请求

使用 OpenFeign 步骤:

  1. 导入相关依赖

    xml
    复制代码
    <!--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>
  2. 在 SpringBoot 的启动类中添加注解 @EnableFeignClients,开启 OpenFeign 服务发现功能

    java
    复制代码
    @SpringBootApplication @EnableFeignClients // 开启OpenFeign功能 public class ItemApplication { public static void main(String[] args) { …… } }
  3. 编写 OpenFeign 客户端(接口

    java
    复制代码
    // @FeignClient:根据服务名称,拉取实例列表 @FeignClient("item-service") public interface ItemClient{ @GetMapping("/items") List<ItemDTO> queryItemByIds(@RequestParam("ids") Collection<Long> ids) }
  4. 使用 FeignClient,实现远程调用

    java
    复制代码
    // 导入自定义的 OpenFeign 客户端接口 private final ItemClient itemClient; // 调用接口中的方法,接口返回值是json格式,但 OpenFeign 使用反射进行类型转换 List<ItemDTO> items = itemClient.queryItemByIds(itemIds);
0个评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
大轩
下载 APP