nacos服务注册和服务发现

服务注册与发现通俗解释
什么是服务注册与发现?
可以把服务注册与发现想象成一个"电话黄页"系统:
服务注册:就像新开一家餐厅需要在黄页上登记自己的电话号码和地址
服务发现:就像你想找餐厅时,查看黄页找到对应的电话号码

详细过程解析
1. 服务注册过程
步骤1:服务启动时自动注册
当微服务启动时,它会自动向Nacos注册中心注册自己的信息:

服务A启动 → 向Nacos注册自己的信息 → Nacos保存服务A的信息
// 在application.yml中配置Nacos注册中心地址
spring:
  application:
    name: cart-service  # 服务名称
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848  # Nacos服务器地址
// 在启动类上添加注解
@SpringBootApplication
@EnableDiscoveryClient  // 启用服务发现功能
public class CartApplication {
    public static void main(String[] args) {
        SpringApplication.run(CartApplication.class, args);
    }
}

当 cart-service 启动时,它会自动向Nacos注册:
服务名称:cart-service
IP地址:本机IP
端口号:配置的端口(如8081)
健康状态:健康

2. 服务发现过程
步骤2:服务调用时自动发现
当一个服务需要调用另一个服务时:

服务B需要调用服务A → 向Nacos查询服务A的信息 → Nacos返回服务A的地址 → 服务B调用服务A
// 在需要调用其他服务的地方使用Feign客户端
@FeignClient(value = "cart-service")  // 指定要调用的服务名称
public interface CartClient {
    @GetMapping("/carts")  // 对应的接口路径
    List<Cart> queryMyCarts();
}
// 在Controller中使用Feign客户端
@RestController
public class OrderController {
    
    @Autowired
    private CartClient cartClient;  // 注入Feign客户端
    
    @GetMapping("/order/create")
    public String createOrder() {
        // 当调用这行代码时,会发生以下过程:
        List<Cart> carts = cartClient.queryMyCarts();
        // 1. Spring Cloud根据@FeignClient("cart-service")知道要调用cart-service
        // 2. 向Nacos查询cart-service的地址
        // 3. Nacos返回cart-service的IP和端口(如192.168.1.100:8081)
        // 4. 向http://192.168.1.100:8081/carts发送请求
        // 5. 返回结果给当前服务
        
        return "订单创建成功";
    }
}

完整示例演示
示例场景:
假设我们有两个服务:用户服务(user-service)和购物车服务(cart-service)
1. 购物车服务(cart-service):

// CartApplication.java
@SpringBootApplication
@EnableDiscoveryClient  // 启用服务发现
public class CartApplication {
    public static void main(String[] args) {
        SpringApplication.run(CartApplication.class, args);
        System.out.println("购物车服务启动成功,已注册到Nacos");
    }
}

// CartController.java
@RestController
@RequestMapping("/carts")
public class CartController {
    
    @GetMapping
    public List<String> getMyCarts() {
        System.out.println("购物车服务被调用");
        return Arrays.asList("商品1", "商品2", "商品3");
    }
}

2. 用户服务(user-service)调用购物车服务:

// UserApplication.java
@SpringBootApplication
@EnableDiscoveryClient  // 启用服务发现
@EnableFeignClients      // 启用Feign客户端
public class UserApplication {
    public static void main(String[] args) {
        SpringApplication.run(UserApplication.class, args);
        System.out.println("用户服务启动成功,已注册到Nacos");
    }
}

// CartClient.java - Feign客户端
@FeignClient("cart-service")  // 要调用的服务名称
public interface CartClient {
    
    @GetMapping("/carts")  // 购物车服务的接口路径
    List<String> getMyCarts();
}

// UserController.java
@RestController
@RequestMapping("/users")
public class UserController {
    
    @Autowired
    private CartClient cartClient;
    
    @GetMapping("/{userId}/cart")
    public List<String> getUserCart(@PathVariable Long userId) {
        System.out.println("用户服务准备调用购物车服务");
        // 这里会自动完成服务发现过程
        List<String> carts = cartClient.getMyCarts();
        System.out.println("成功获取到购物车数据:" + carts);
        return carts;
    }
}

实际执行流程
当访问 http://localhost:8082/users/1/cart 时:
用户服务启动时:向Nacos注册:服务名=user-service,地址=localhost:8082
购物车服务启动时:向Nacos注册:服务名=cart-service,地址=localhost:8081
请求处理过程:

   客户端请求 → 用户服务(/users/1/cart)
     ↓
   UserController调用cartClient.getMyCarts()
     ↓
   Feign发现需要调用"cart-service"
     ↓
   向Nacos查询"cart-service"的地址
     ↓
   Nacos返回地址:localhost:8081
     ↓
   Feign向http://localhost:8081/carts发送请求
     ↓
   购物车服务返回数据
     ↓
   用户服务接收数据并返回给客户端
   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值