一、简单介绍

Nacos 和之前介绍过的 Eureka 都是注册中心,解决的问题和 Eureka 也一样

二、使用方法

这里省略 nacos 的安装方法了

1、引入Spring Cloud Alibaba 依赖

在父工程的pom文件中的 中引入Spring Cloud Alibaba的依赖:

<properties>
    <spring-cloud-alibaba.version>2022.0.0.0-RC2</spring-cloud-alibaba.version>
</properties>

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-alibaba-dependencies</artifactId>
    <version>${spring-cloud-alibaba.version}</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>
 

注意:Spring Boot 和Spring Cloud的版本是有⼀定对应关系的. Spring Cloud Alibaba也遵循 Spring Cloud的标准,在引入依赖时,⼀定要确认各个版本的对应关系. Spring Cloud Alibaba和Spring Cloud版本对应关系, 参考官方文档:

https://sca.aliyun.com/docs/2022/overview/version-explain/

2、在 服务消费者(order-service) 和 服务提供者(product-service) 中引入nacos依赖和 LoadBalancer 依赖

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-loadbalancer</artifactId>
</dependency>

3、在 服务消费者(order-service) 和 服务提供者(product-service) 的配置文件中配置 Nacos 地址(这里的地址为我服务器上nacos的地址)

spring:
 application:
     name: product-service
 cloud:
     nacos:
         discovery: 
             server-addr: xxxxxxxx

4、远程调用

1、修改IP为项目名

package com.linzhixin.order.service;

import com.linzhixin.order.mapper.OrderMapper;
import com.linzhixin.order.model.OrderInfo;
import com.linzhixin.order.model.ProductInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;

@Service
public class OrderService {

    @Autowired
    private OrderMapper orderMapper;

    @Autowired
    private RestTemplate restTemplate;

    public OrderInfo selectOrderById(Integer orderId) {
        OrderInfo orderInfo = orderMapper.selectOrderById(orderId);
        String url = "http://product-service/product/" + orderInfo.getProductId();
        ProductInfo productInfo = restTemplate.getForObject(url, ProductInfo.class);
        orderInfo.setProductInfo(productInfo);
        return orderInfo;
    }

}

2、为 restTemplate 添加负载均衡注解 @LoadBalanced 

package com.linzhixin.order.config;

import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;

@Configuration
public class BeanConfig {
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }

}

5、启动 order-service服务 与 product-service 服务

观察 nacos,可以观察到

6、发起请求测试

测试接口:http://127.0.0.1:8080/order/1

7、启动多个实例,测试负载均衡

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐