自学内容网 自学内容网

【Nacos】Nacos快速上手


在这里插入图片描述

项目环境介绍

请你确保你的服务器或个人主机上已经安装并配置了Nacos
如果没有,请先安装Nacos并进行相应配置:Nacos安装和配置

这里我们使用一个父子工程的项目来进行演示,子工程一个是订单服务order-service,一个是商品服务product-service,在访问订单服务的时候,它就会远程调用我们的商品服务(此处订单服务时服务消费者,商品服务是服务提供者)
在这里插入图片描述

远程调用代码:

@Service
public class OrderService {
    @Autowired
    private OrderMapper orderMapper;
    @Autowired
    private RestTemplate restTemplate;

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

一、服务注册/服务发现

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版本对应关系,参考官方文档:版本发布说明
版本在一定范围内才可以选择使用

2.引入Nacos相关的依赖

order-serviceproduct-service中引入nacos依赖

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

3.引入Load Balance依赖

同样在order-serviceproduct-service中都引入

<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-loadbalancer</artifactId>
</dependency>

4.配置Nacos的地址

可以配置在我们自己的主机上也可以配置在Linux服务器上,此处我们选择Linux

配置项Key默认值说明
服务端地址spring.cloud.nacos.discovery.server-addrNacos Server启动监听的ip地址和端口
spring:
  application:
    name: product-service
  #服务端地址
  cloud:
    nacos:
      discovery:
        server-addr: http://120.26.87.94:10020/ 

当然,此处如果使用的是本机作为Nacos服务中心,配置项该位自己主机的ip和相应端口即可


二、修改远程调用代码

把代码修改成我们的项目名

@Service
public class OrderService {
    @Autowired
    private OrderMapper orderMapper;
    @Autowired
    private RestTemplate restTemplate;

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

别忘了添加负载均衡注解 @LoadBalanced

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

三、测试

测试接口:http://127.0.0.1:8080/order/1
在这里插入图片描述

此时启动这两个服务,就会发现在Nacos管理界面就已经有这两个服务了
在这里插入图片描述


四、启动多个服务,测试负载均衡

services栏中,我们可以配置多个服务,具体操作步骤如下:
右击我们要进行复制的服务,然后选择Copy Configuration项,然后再弹出的窗口中点击Modify options->Add VM options,进行端口配置,后续会出现一个新的输入项,我们输入-Dserver.port={自定义端口号}再确认即可创建出多个服务实例
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
启动服务,观察Nacos界面,就可以看到我们已经添加了多个服务实例
在这里插入图片描述


五、可能出现的问题

java.net.UnknownHostException

出现这种问题大概率是因为没有添加负载均衡的依赖

检查是否添加了依赖

<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-loadbalancer</artifactId>
</dependency>

服务注册失败

这种情况有可能会有报错日志也可能没有,但出现这种情况我们应该检查Spring Cloud Alibaba版本是否是正确的:版本发布说明
在这里插入图片描述


原文地址:https://blog.csdn.net/2202_75555590/article/details/145281383

免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!