从零开始看 Nacos 源码环境搭建

1,529 阅读4分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第22天,点击查看活动详情

Nacos 源码分析系列相关文章

  1. 从零开始看 Nacos 源码环境搭建
  2. 图解+源码讲解 Nacos 客户端发起注册流程
  3. 图解+源码讲解 Nacos 服务端处理注册请求逻辑
  4. 图解+源码讲解 Nacos 客户端下线流程
  5. 图解+源码讲解 Nacos 服务端处理下线请求
  6. 图解+源码讲解 Nacos 客户端发起心跳请求
  7. 图解+源码讲解 Nacos 服务端处理心跳请求
  8. 图解+源码讲解 Nacos 服务端处理配置获取请求

从零开始看 Nacos 源码环境搭建

唯有行动才能改造命运

源码下载

1. 通过 git 命令下载 Nacos 项目

git clone https://github.com/alibaba/nacos.git

源码编译

1. 用 maven 指令进行项目编译

cd nacos/
mvn -Prelease-nacos -Dmaven.test.skip=true clean install -U  

项目结构

image.png

Nacos 服务端源码启动

1. 启动类

image.png
Nacos 启动器

/** 
* Nacos starter.
*/
@SpringBootApplication(scanBasePackages = "com.alibaba.nacos")
@ServletComponentScan
@EnableScheduling
public class Nacos {
    public static void main(String[] args) {
        SpringApplication.run(Nacos.class, args);
    }
}

2. 设置单机节点启动

    -Dnacos.standalone=true
image.png

3. 启动结果

    启动模式是:单例模式
    端口号是:8848
    服务界面地址是:http://192.168.60.3:8848/nacos
    账号:nacos
    密码:nacos
image.png

4. 控制台页面

image.png

service-provider 服务提供者环境搭建

1. 引入 pom 配置文件

    配置服务注册发现中心,版本是 2.1.4.RELEASE

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

2. 启动类创建

    @EnableDiscoveryClient 开启服务注册功能

package springcloud.service.nacos;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@SpringBootApplication
@EnableDiscoveryClient // 开启服务注册功能
public class DiscoveryProviderApplication {
    public static void main(String[] args) {
        SpringApplication.run(DiscoveryProviderApplication.class, args);
    }
}

3. 服务提供接口创建

    创建一个服务提供者接口,提供给服务调用者调用

package springcloud.service.nacos.controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
/**
 * @Version V1.0.0
 * @Since 1.0
 * @Date 2022/4/17
 * @Description
 */
@RestController
@RequestMapping("discovery")
public class DiscoveryProviderController {

    @RequestMapping(value = "/echo/{string}", method = RequestMethod.GET)
    public String echo(@PathVariable String string) {
        return "Hello Nacos Discovery " + string;
    }

}

4. application.properties 文件配置

server.port=1010 // 服务端口号
spring.application.name=service-provider // 服务名字
spring.cloud.nacos.discovery.server-addr=localhost:8848 // 注册中心地址
spring.cloud.nacos.discovery.username=nacos // 控制台账号
spring.cloud.nacos.discovery.password=nacos // 控制台密码
spring.cloud.nacos.discovery.namespace=public // 命名空间

5. 服务启动注册

    服务启动成功,并且注册完成
image.png

6. 控制台服务列表查看注册服务

image.png

service-consumer 服务消费者环境搭建

1. 引入 pom 配置文件

    配置服务注册发现中心,版本是 2.1.4.RELEASE

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

2. 启动类创建

@EnableDiscoveryClient 开启服务注册功能

package springcloud.service.nacos;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@SpringBootApplication
@EnableDiscoveryClient // 开启服务注册功能
public class DiscoveryProviderApplication {
    public static void main(String[] args) {
        SpringApplication.run(DiscoveryProviderApplication.class, args);
    }
}

3. 负载均衡配置

    通过注解 @LoadBalanced 进行负载均衡配置,一看到这个注解感觉就是 Ribbon 配置

package springcloud.service.nacos.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;
/**
 * @Version V1.0.0
 * @Since 1.0
 * @Date 2022/4/17
 * @Description
 */
@Configuration
public class RestConfig {
    @LoadBalanced
    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}

4. 服务调用者接口创建

package springcloud.service.nacos.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

/**
 * @Version V1.0.0
 * @Since 1.0
 * @Date 2022/4/17
 * @Description
 */
@RestController
@RequestMapping("discovery")
public class DiscoveryConsumerController {
    @Autowired
    private RestTemplate restTemplate;
    @RequestMapping(value = "/echo/{str}", method = RequestMethod.GET)
    public String echo(@PathVariable String str) {
        return restTemplate.getForObject("http://service-provider/discovery/echo/" + str, String.class);
    }
}

5. application.properties 文件配置

server.port=1020 // 端口号
spring.application.name=service-consumer //服务消费者名字
spring.cloud.nacos.discovery.server-addr=localhost:8848 // 注册中心地址
spring.cloud.nacos.discovery.username=nacos// 账号
spring.cloud.nacos.discovery.password=nacos// 密码
spring.cloud.nacos.discovery.namespace=public // 命名空间

6. 服务启动注册

image.png

7. 控制台服务列表查看注册服务

image.png

服务访问

   请求地址:http://localhost:1020/discovery/echo/haha
   返回结果:Hello Nacos Discovery haha
    到这里我们的环境就算搭建完成了后续我们会进行服务注册、服务发现、以及服务心跳等功能进行分析

其他系列源码分析

feign 源码分析系列相关文章

  1. 图解+源码讲解 Feign 如何将客户端注入到容器中
  2. 图解+源码讲解动态代理获取 FeignClient 代理对象
  3. 图解+源码讲解代理对象 ReflectiveFeign 分析
  4. 图解+源码讲解 Feign 如何选取指定服务
  5. 图解+源码讲解 Feign 请求的流程
    ribbon 源码分析系列相关文章
  6. Ribbon 原理初探
  7. 图解+源码讲解 Ribbon 如何获取注册中心的实例
  8. 图解+源码讲解 Ribbon 服务列表更新
  9. 图解+源码讲解 Ribbon 服务选择原理
  10. 图解+源码讲解 Ribbon 如何发起网络请求 eureka 源码分析系列相关文章
  11. eureka-server 项目结构分析
  12. 图解+源码讲解 Eureka Server 启动流程分析
  13. 图解+源码讲解 Eureka Client 启动流程分析
  14. 图解+源码讲解 Eureka Server 注册表缓存逻辑
  15. 图解+源码讲解 Eureka Client 拉取注册表流程
  16. 图解+源码讲解 Eureka Client 服务注册流程
  17. 图解+源码讲解 Eureka Client 心跳机制流程
  18. 图解+源码讲解 Eureka Client 下线流程分析
  19. 图解+源码讲解 Eureka Server 服务剔除逻辑
  20. 图解+源码讲解 Eureka Server 集群注册表同步机制