Nacos源码分析_01

1、Nacos简介

1)、为什么叫Nacos

前四个字母分别为Naming和Configuration的前两个字母,最后的s为Service

2)、是什么

  • 一个更易于构建云原生应用的动态服务发现,配置管理和服务管理中心
  • Nacos:Dynamic Naming and Configuration Service
  • Nacos就是注册中心+配置中心的组合
  • Nacos = Eureka+Config+Bus

3)、能干嘛

  • 替代Eureka做服务注册中心
  • 替代Config做服务配置中心

4)、去哪下

GitHub - alibaba/nacos: an easy-to-use dynamic service discovery, configuration and service management platform for building cloud native applications.

官网文档:

home

Spring Cloud Alibaba Reference Documentation

5)、各种注册中心比较

2、安装并运行Nacos

1)、本地Java8+Maven环境已经OK

2)、先从官网下载Nacos

Release 1.1.4(Oct 24th, 2019) · alibaba/nacos · GitHub

3)、解压安装包,直接运行bin目录下的startup.cmd

4)、命令运行成功后直接访问http://localhost:8848/nacos

5)、默认账号密码都是nacos

6)、结果页面

3、Nacos作为服务注册中心演示

1)、基于Nacos的服务提供者

  • 新建Module:cloudalibaba-provider-payment9001
  • pom
<!--spring cloud alibaba 2.1.0.RELEASE-->
<dependency>
  <groupId>com.alibaba.cloud</groupId>
  <artifactId>spring-cloud-alibaba-dependencies</artifactId>
  <version>2.1.0.RELEASE</version>
  <type>pom</type>
  <scope>import</scope>
</dependency> 
< dependencies >
  <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>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
  </dependency>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <scope>runtime</scope>
    <optional>true</optional>
  </dependency>
  <dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <optional>true</optional>
  </dependency>
  <dependency>
    < groupId > org.springframework.boot </ groupId >
    < artifactId > spring-boot-starter-test </ artifactId >
    < scope > test </ scope >
  </dependency> 
  • YML
server :
port :  9001
spring :
application :
name :  nacos-payment-provider
cloud :
nacos :
discovery :
server-addr :  localhost:8848  # 配置 Nacos 地址
management :
endpoints :
web :
exposure :
include :  '*'
  • 主启动
package  com.abc.springcloud.alibaba ;
import  org.springframework.boot.SpringApplication ;
import  org.springframework.boot.autoconfigure. SpringBootApplication ;
import  org.springframework.cloud.client.discovery. EnableDiscoveryClient ;
@EnableDiscoveryClient
@SpringBootApplication
public  class  PaymentMain9001  {
    public  static void  main ( String []  args ) {
        SpringApplication . run ( PaymentMain9001 . class , args );
    }
}
  • 业务类
package  com.abc.springcloud.alibaba.controller ;
import  org.springframework.beans.factory.annotation. Value ;
import  org.springframework.web.bind.annotation. GetMapping ;
import  org.springframework.web.bind.annotation. PathVariable ;
import  org.springframework.web.bind.annotation. RestController ;
@RestController
public  class  PaymentController
{
    @Value ( "${server.port}" )
    private  String  serverPort ;
    @GetMapping ( value  =  "/payment/nacos/{id}" )
    public  String  getPayment ( @PathVariable ( "id" )  Integer  id )
    {
        return  "nacos registry, serverPort: " +  serverPort + " \t  id" + id ;
    }
}
  • 测试

http://lcoalhost:9001/payment/nacos/1

nacos控制台

nacos服务注册中心+服务提供者9001都ok了

2)、基于Nacos的服务消费者

  • 新建Module:cloudalibaba-consumer-nacos-order83
  • POM
< dependencies >
  <!--SpringCloud ailibaba nacos -->
  <dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
  </dependency>
  < dependency >
    < groupId > com.abc.springcloud </ groupId >
    < artifactId > cloud-api-commons </ artifactId >
    < version > ${project.version} </ version >
    </ dependency > 
  < dependency >
    < groupId > org.springframework.boot </ groupId >
    < artifactId > spring-boot-starter-web </ artifactId >
    </ dependency >
  < dependency >
    < groupId > org.springframework.boot </ groupId >
    < artifactId > spring-boot-starter-actuator </ artifactId >
    </ dependency > 
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <scope>runtime</scope>
    <optional>true</optional>
  </dependency>
  <dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <optional>true</optional>
  </dependency>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
  </dependency>
  </ dependencies >

为什么nacos支持负载均衡:

  • YML
server :
port :  83
spring :
application :
name :  nacos-order-consumer
cloud :
nacos :
discovery :
server-addr :  localhost:8848
service-url :
nacos-user-service :  http://nacos-payment-provider
  • 主启动
package  com.abc.springcloud.alibaba ;
import  org.springframework.boot.SpringApplication ;
import  org.springframework.boot.autoconfigure. SpringBootApplication ;
import  org.springframework.cloud.client.discovery. EnableDiscoveryClient ;
@EnableDiscoveryClient
@SpringBootApplication
public  class  OrderNacosMain83
{
    public  static void  main ( String []  args )
    {
        SpringApplication . run ( OrderNacosMain83 . class , args );
    }
}
  • 业务类

ApplicationContextBean

package  com . abc . springcloud . alibaba . 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  ApplicationContextConfig
{
    @Bean
    @LoadBalanced
    public  RestTemplate getRestTemplate ()
    {
        return new  RestTemplate ();
    }
}

OrderNacosController

package  com.abc.springcloud.alibaba.controller ;
import  lombok.extern.slf4j. Slf4j ;
import  org.springframework.beans.factory.annotation. Value ;
import  org.springframework.web.bind.annotation. GetMapping ;
import  org.springframework.web.bind.annotation. PathVariable ;
import  org.springframework.web.bind.annotation. RestController ;
import  org.springframework.web.client.RestTemplate ;
import  javax.annotation. Resource ;
@RestController
@Slf4j
public  class  OrderNacosController
{
    @Resource
    private  RestTemplate  restTemplate ;
    @Value ( "${service-url.nacos-user-service}" )
    private  String  serverURL ;
    @GetMapping ( value  =  "/consumer/payment/nacos/{id}" )
    public  String  paymentInfo ( @PathVariable ( "id" )  Long  id )
    {
        return  restTemplate . getForObject ( serverURL + "/payment/nacos/" + id , String . class );
    }
}

测试

localhost:83/consumer/payment/nacos/13

83访问9001/9002,轮询负载OK

4)、服务注册中心对比

Nacos全景图所示

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值