ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

NACOS学习心得体会

2021-10-02 16:03:21  阅读:213  来源: 互联网

标签:心得体会 spring boot nacos springframework NACOS 学习 import org


NACOS学习

下载

下载地址:https://pan.baidu.com/s/1-ZY4kca05VojJ_79yubP1A 提取码:ilcd

启动nacos

  • 异常一

    java.io.IOException: java.lang.IllegalArgumentException: db.num is null

    创建一个名为 nacos 的数据库,在 nacos/conf 目录下找到 nacos-mysql.sql 文件,打开文件执行 nacos-mysql.sql 脚本里的 sql

    修改 application.properties 文件里的 mysql 配置,修改为自己的数据库连接

  • 异常二: Unable to start web server; nested exception is org.springframework.boot.web.server.WebServerException: Unable to start embedded Tomcat

    方案:修改 nacos/bin 目录下的 startup.cmd 文件,修改为单机模式,默认是集群模式

    原默认是 cluster 修改为 standalone set MODE="standalone"

 

访问NACOS管理网站

  1. 在浏览器中输入:http://localhost:8848/nacos

  2. 输入用户名:nacos,密码:nacos

Spring boot微服务注册到Nacos

  • pom.xml 文件中,引入相关依赖

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.3.5.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>spring-boot2</name>
    <description>Demo project for Spring Boot</description>

    <properties>
    <java.version>8</java.version>
    <nacos-config-spring-boot.version>0.2.1</nacos-config-spring-boot.version>
    <nacos-discovery-spring-boot.version>0.2.3</nacos-discovery-spring-boot.version>
    </properties>
    <dependencies>
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <!-- redis -->
    <dependency>
               <groupId>org.springframework.boot</groupId>
               <artifactId>spring-boot-starter-data-redis</artifactId>
          </dependency>
           <dependency>
       <groupId>com.alibaba.boot</groupId>
       <artifactId>nacos-discovery-spring-boot-starter</artifactId>
       <version>${nacos-discovery-spring-boot.version}</version>
    </dependency>
    <dependency>
               <groupId>com.google.guava</groupId>
               <artifactId>guava</artifactId>
               <version>28.2-jre</version>
          </dependency>
           <!--nacos客户端-->
           <!--  
    <dependency>
               <groupId>org.springframework.cloud</groupId>
               <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
               <version>0.1.2.RELEASE</version>
           </dependency>-->

    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
    <exclusions>
    <exclusion>
    <groupId>org.junit.vintage</groupId>
    <artifactId>junit-vintage-engine</artifactId>
    </exclusion>
    </exclusions>
    </dependency>
    <!--devtools热部署-->
           <dependency>
               <groupId>org.springframework.boot</groupId>
               <artifactId>spring-boot-devtools</artifactId>
               <optional>true</optional>
               <scope>true</scope>
          </dependency>
    </dependencies>
    <build>
    <defaultGoal>compile</defaultGoal>
    <plugins>
    <plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
                       <includeSystemScope>true</includeSystemScope>
                  </configuration>
    </plugin>
    </plugins>
    </build>
    </project>

     

  • 重点是引入 nacos-discovery-spring-boot-starter 依赖,实现对 Nacos 作为注册中心的自动化配置。

  • 在application.properties中,添加 Nacos 配置,如下:

    # 要注册的服务名
    spring.application.name=example
    # 端口
    server.port=8080
    # nacos server 地址信息
    #spring.cloud.nacos.discovery.server-addr=localhost:8848
    nacos.discovery.server-addr=127.0.0.1:8848
    nacos.discovery.auto-register=true # 是否自动注册到 Nacos 中。默认为 false。
    nacos.discovery.register.service-name=${spring.application.name} # 注册到 Nacos 的服务名
    nacos.discovery.register.group-name=DEFAULT_GROUP # 使用的 Nacos 服务分组,默认为 DEFAULT_GROUP。

 

  1. 问题:配置pom文件,报错:Project build error: ‘dependencies.dependency.version’ fo

    <properties>
    <java.version>8</java.version>
    <nacos-config-spring-boot.version>0.2.1</nacos-config-spring-boot.version>
    <nacos-discovery-spring-boot.version>0.2.3</nacos-discovery-spring-boot.version>
    </properties>
    <dependency>
       <groupId>com.alibaba.boot</groupId>
       <artifactId>nacos-discovery-spring-boot-starter</artifactId>
       <version>${nacos-discovery-spring-boot.version}</version>
    </dependency>

     

ProviderController编写

package com.example.demo.controller;

import javax.servlet.http.HttpServletRequest;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/provider")
public class ProviderController {
@RequestMapping("/demo")
public String echo(HttpServletRequest request) {
return "echo:" + request.getParameter("name");
}
}

ConsumerController

package com.example.demo.controller;

import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

import com.alibaba.nacos.api.annotation.NacosInjected;
import com.alibaba.nacos.api.exception.NacosException;
import com.alibaba.nacos.api.naming.NamingService;
import com.alibaba.nacos.api.naming.pojo.Instance;

@RestController
@RequestMapping("/consumer")
public class ConsumerController {
@NacosInjected
   private NamingService namingService;

   private RestTemplate restTemplate = new RestTemplate();
   
   @GetMapping("/demo")
   public String consumer() throws IllegalStateException, NacosException {
       // <1> 获得实例
       Instance instance = null;
       if (false) {
           List<Instance> instances = namingService.getAllInstances("demo-application");
           // 获得首个实例,进行调用
           instance = instances.stream().findFirst()
                  .orElseThrow(() -> new IllegalStateException("未找到对应的 Instance"));
      } else {
           instance = namingService.selectOneHealthyInstance("demo-application");
      }
       // <2> 执行请求
       return restTemplate.getForObject("http://" + instance.toInetAddr() + "/provider/demo?name=nacos",
               String.class);
  }
}

运行测试

  1. 微服务启动后,在启动日志中会看到以下信息,表明微服务已经注册到nacos

    2021-10-02 15:17:52.359  INFO 18516 --- [  restartedMain] c.a.b.n.d.a.NacosDiscoveryAutoRegister   : Finished auto register service : demo-consumer, ip : 192.168.0.12, port : 8081

     

  2. 我起了两个为服务,8080端口的是provider,8081的是consumer.

  3. 在浏览器的中办入:http://127.0.0.1:8081/consumer/demo   echo:nacos

  4. nacos的服务列表中注册了两个微服务

  5. demo-application DEFAULT_GROUP 1 1 1 false 详情|示例代码|订阅者|删除
    demo-consumer DEFAULT_GROUP 1 1 1 false 详情|示例代码|订阅者|删除

     

 

标签:心得体会,spring,boot,nacos,springframework,NACOS,学习,import,org
来源: https://www.cnblogs.com/felixterry/p/15362037.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有