Nacos服务发现和配置管理

工具:nacos
黑马程序员提供教学视频以及资料

服务发现和配置管理

1、 理解微服务架构的特点
2、 理解服务发现的流程
3、 说出nacos的功能
4、 掌握nacos的安装方法
5、 掌握RESTful服务发现开发方法
6、 掌握Dubbo服务发现开发方法
7、 理解nacos服务发现的数据模型
8、 掌握nacos配置管理方法
9、 掌握nacos扩张配置方法

服务发现

1.1 微服务架构(粒度小)
为适应企业的业务发展,提高软件研发的生产力,降低软件研发的成本,软件架构也做了升级和优化,将一个独立的系统拆分成若干个小的服务,每个小的服务运行在不同的进程中,服务与服务之间采用RESTful、RPC等协议传输数据,每个服务所拥有的功能具有独立性强的特点,这样的设计就实现了单个服务的高内聚,服务与服务之间的低耦合效果,这些小服务就是微服务,基于这种方法设计的系统架构即微服务架构。
特点:
1、 服务层按业务拆分为一个一个的微服务
2、 微服务的职责单一
3、 微服务之间才用RESTful、RPC等轻量级协议传输
4、 有利于采用前后端分离架构

1.2 理解服务发现

1.2.1测试环境
在微服务架构中,整个系统会按职责能力划分为多个服务,通过服务之间协作来实现目标。这样在我们的代码中免不了要进行服务间的远程调用,服务的消费方要调用服务的生产方,为了完成一次请求,消费方需要知道服务生产方的网络位置(IP地址和端口号)
可以通过读取配置文件的方式读取服务生产方网络位置:

创建一个Maven父工程 nacos-discovery
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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.nacos</groupId>
    <artifactId>nacos-discovery</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>pom</packaging>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>2.5.0</version>
            </dependency>
        </dependencies>
    </dependencyManagement>
</project>

创建服务提供者(生产者),nacos-restful-provider
Pom.xml

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

创建RestProviderController

package com.nacos.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController  //基于rest的协议
public class RestProviderController {
    //暴露服务(restful接口)
    @GetMapping(value = "/service")
    public String service(){
        System.out.println("provider invoke");
        return "provider invoke";
    }
}

创建启动类SpringRestProviderBootstrap

package com.nacos;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class SpringRestProviderBootstrap {
    public static void main(String[] args) {
        SpringApplication.run(SpringRestProviderBootstrap.class,args);
    }
}

在这写上依赖,发现有报错
在这里插入图片描述

解决方法:在nacos-restful-provider上面右键,找到maven—》reimport,然后就可以了。下面consumer同理

创建application.yml
在这里插入图片描述

新建一个module,服务消费者nacos-restful-consumer
Pom

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

RestConsumerController

package com.nacos.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
@RestController
public class RestConsumerController {
    //要进行远程 需要提供方的IP和端口
    @Value("${provider.address}")
    private String provider;
    //实现方法进行远程调用
    @GetMapping(value = "/service")
    public String service(){
        //远程调用
        RestTemplate restTemplate = new RestTemplate();
        String result = restTemplate.getForObject("http://" + provider + "/service", String.class);
        return "Consumer invoke" + result;
    }
}

主启动类SpringRestConsumerBootstrap

package com.nacos;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class SpringRestConsumerBookstrap {
    public static void main(String[] args) {
        SpringApplication.run(SpringRestConsumerBookstrap.class,args);
    }
}

Application.yml
在这里插入图片描述

运行provider后再运行consumer。访问路径:http://localhost:56020/service
在这里插入图片描述
目录结构
在这里插入图片描述

然后启动主启动类SpringRestProviderBootstrap,访问路径:http://localhost:56010/service

服务发现流程

上边的例子,对于微服务应用而言行不通。首先,微服务可能是部署在云环境的,服务实例的网络位置或许是动态分配的。另外,每一个服务一般会有多个实例来做负载均衡,由于宕机或升级,服务实例网络地址会经常动态改变。再者,每一个服务也可能应对临时访问压力增加新的服务节点。
在这里插入图片描述

服务发现就是服务消费方通过服务发现中心智能发现服务提供方,从而进行远程调用的过程
在这里插入图片描述

上图中服务实例本身并不记录服务生产方的网络地址,所有服务实例内部都会包含服务发现客户端。
(1)、在每个服务启动时会向服务发现中心上报自己的网络设置。这样,在服务发现中心内部会形成一份服务注册表,服务注册表是服务发现的核心部分,是包含所有服务实例的网络地址的数据库。
(2)、服务发现客户端会定期从服务发现中心同步服务注册表,并缓存在客户端。
(3)、当需要对某服务进行请求时,服务实例它通过该注册表,定位目标服务网络地址。若目标服务存在多个网络地址,则使用负载均衡算法从多个服务实例中选择出一个,然后发出请求。
总结:在微服务环境中,由于服务运行实例的网络地址是不断动态变化的,服务实例数量的动态变化,因此无法使用固定的配置文件来记录服务提供方的网络地址,必须使用动态的服务发现机制用于实现微服务间的相互感知。各服务实例会上报自己的网络地址,这样服务中心就形成了一个完整的服务注册表,各服务实例会通过服务发现中心来获取访问目标的网络地址,从而实现服务发现的机制。

Nacos服务发现

目前市场上用的比较多的服务发现中心有:Nacos、Eureka、Consul和Zookeeper
在这里插入图片描述
上面对比科了解到,Nacos作为服务发现中心,具备更多的功能支持项,且从长远来看Nacos在以后的版本会支持SpringCloud+Kubernetes的组合,填补两者的鸿沟,在两套体系下可以采用同一套服发现和配置管理的解决方案,这将大大的简化使用和维护的成本。另外,Nacos计划实现Service Mesh,也是未来微服务发展的趋势。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值