提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


文章目录

  • 前言
  • 一、nacos是什么?
  • 二、使用步骤
  • 1.项目搭建
  •  2.注意项目
  • 3.springboot与springcloud 之间的关系
  • 4. 服务之前的调用
  • 总结



前言

随着目前自个业务系统的拓展,单体的服务要解决问题变得越来越臃肿,拓展性也变得很差,随之产生了服务的拆分,每个微服务只关心自己的业务,但在一个服务集群中,呈现的是整个对外的一致性。这里先以比较重要的注册中心来说。


提示:以下是本篇文章正文内容,下面案例可供参考

一、nacos是什么?

Alibaba nacos 是对比Eureka的 轻量级注册中心,操作简单,拓展性强,提供可视界面

二、使用步骤

1.项目创建

      pom.xml

<!-- 有几处需要注意的地方-->
<!-- 1,在maven 管理的项目中parent 引入 项目的主springboot 版本 -->
 <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-dependencies</artifactId>
        <version>2.2.6.RELEASE</version>
  </parent>

<!-- 特别注意springboot 与springcloud 版本之间的关系,如果版本不对会导致服务配置异常,坑无数-->
 <properties>
        <alibaba-version>2.2.6.RELEASE</alibaba-version>
        <tomcat.version>9.0.33</tomcat.version>
        <spring-cloud.version>Hoxton.SR10</spring-cloud.version>
 </properties>


<!-- 2,  -->
<dependencyManagement>
        <!-- 引入alibaba nacos -->
        <dependencies>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>${alibaba-version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
</dependencyManagement>

构建完上述的pom.xml 。便可以开始搭建项目

1.1 下载Nacos 服务到对应的机器 

Quick Start for Nacos Spring Cloud Projects

Spring Cloud Alibaba

Nacos 2.0.3 下载地址1

1.2  下载完成之后解压出来,是个jar文件并带有一些配置

nacos 注册的ip是容器里的_nacos 注册的ip是容器里的

 bin 文件夹里 包含有核心的启动及停止sh

conf 是所有的配置在这里,主要配置服务的启动,数据源的配置,集群的配置等;

注意: 这里需要修改几处地方

1.1.1 application.properties 

#*************** Spring Boot Related Configurations ***************#
### Default web context path:
server.servlet.contextPath=/nacos
### Default web server port:
server.port=8848

#*************** Network Related Configurations ***************#
### If prefer hostname over ip for Nacos server addresses in cluster.conf:
# nacos.inetutils.prefer-hostname-over-ip=false

### Specify local server's IP:
# nacos.inetutils.ip-address=

# 以下是重点配置,不配置直接启动会报错
#*************** Config Module Related Configurations ***************#
### If use MySQL as datasource:
spring.datasource.platform=mysql

### Count of DB:
db.num=1

### Connect URL of DB:
db.url.0=jdbc:mysql://localhost:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=123456

1.1.2 执行Sql

创建一个数据库,默认使用的库名为nacos , 并执行以下的sql 语句

nacos-mysql.sql

schema.sql

1.1.3 更新 cluster.conf.example配置文件

将文件名改成 cluster.conf

#2021-10-15T10:49:10.806
127.0.0.1:8847

这样单机版本就能启动了

1.1.4 启动 bin 目录下的 /bin/startup.sh 

sh startup.sh 
/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/bin/java -Djava.ext.dirs=/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/jre/lib/ext:/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/lib/ext  -server -Xms2g -Xmx2g -Xmn1g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m -XX:-OmitStackTraceInFastThrow -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/Users/shefenfei/Documents/Server/nacos/logs/java_heapdump.hprof -XX:-UseLargePages -Dnacos.member.list= -Xloggc:/Users/shefenfei/Documents/Server/nacos/logs/nacos_gc.log -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=100M -Dloader.path=/Users/shefenfei/Documents/Server/nacos/plugins/health,/Users/shefenfei/Documents/Server/nacos/plugins/cmdb -Dnacos.home=/Users/shefenfei/Documents/Server/nacos -jar /Users/shefenfei/Documents/Server/nacos/target/nacos-server.jar  --spring.config.additional-location=file:/Users/shefenfei/Documents/Server/nacos/conf/ --logging.config=/Users/shefenfei/Documents/Server/nacos/conf/nacos-logback.xml --server.max-http-header-size=524288
nacos is starting with cluster
nacos is starting,you can check the /Users/shefenfei/Documents/Server/nacos/logs/start.out

以上如果没有问题,服务可正常启动。 在浏览器中,输入 http://localhost:8848/nacos/index.html

用户名密码默认是 nacos / nacos 启动界面如下

nacos 注册的ip是容器里的_Nacos_02

 

2. 构建一个服务提供者 Service-Provider 

nacos 注册的ip是容器里的_Nacos_03

 在 docker-spring-nacos 项目中的我们只需要加入以下两个就可以;

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

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

2.2 主程序中 

@SpringBootApplication
// 这个注解很重要,标识为一个向nacos注册的客户端
@EnableDiscoveryClient
public class NacosApplication {

    public static void main(String[] args) {
        SpringApplication.run(NacosApplication.class, args);
    }
}


@RestController
@RequestMapping("/nacos")
public class NacosController {

    @GetMapping("/hello")
    public ResponseEntity hello() {
        Map<String, Object> objectMap = new HashMap<String, Object>();
        objectMap.put("hello", "world");
        return ResponseEntity.ok(objectMap);
    }
}

 application.yml 配置

spring:
  application:
    name: nacos-server1
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
server:
  port: 9998

启动 NacosApplication 应用 ,启动没有问题,在Nacos的管理界面中会有一个服出现;并以 spring.application.name 为服务名  ,这个也很重要,将来暴露给其他的调用的时候就用这个名

2.3  创建另外一个service-consumer 

创建是跟之前一样的流程,只需要将端口及服务名修改

// 这里的名就我们注册的provider的名
@FeignClient(name = "nacos-server1")
public interface ConsumerClient {

    @GetMapping("/nacos/hello")
    String getResp();
}


@RestController
@RequestMapping("/feign")
public class FeignInckController {

    @Autowired
    private ConsumerClient consumerClient;

    @GetMapping("/fetch")
    public ResponseEntity feign() {
        String resp = consumerClient.getResp();
        return ResponseEntity.ok(resp);
    }
}

postman 调用测试下

nacos 注册的ip是容器里的_spring_04


总结

在这里做一个服务注册发现就已经全部完成了,需要增加的功能可根据自己情况,加定制,后续我会再写一个关于配置中心的文章。