起因

    之前使用的都是spring cloud的全家桶,Eureka、spring config、spring gateway等组件。为了减少微服务的数量,我们将spring config和Eureka做成了一个服务,既充当服务注册中心,有充当服务配置中心。可是每一次修改完配置文件之后都需要重新启动Eureka来使修改的配置生效,这大大的降低了开发的效率。

​ 注册中心本质是为了解耦服务提供者和服务消费者的。任何一个微服务都应该存在或者支持多个提供者,而提供者的数量和分布是无法预先确定的,因此就需要有一个组件来管理微服务提供者的注册和发现,这个就是注册中心。

CAP理论

  • 一致性(Consistency)
  • 可用性(Availability)
  • 分隔容忍(Partition tolerance)

CAP理论是分布式架构中重要的理论。

一致性就是所有节点在同一时间具有相同的数据,可用性就是保证每个请求不管成功或者失败都有响应,某一个节点挂掉并不会影响整个系统的接受和发出请求,分割容忍就是系统中任意信息的丢失或失败不会影响系统的继续运作。

主流注册中心对比

NacosEurekaConsulZookeeper
CAP理论CP+APAPCPCP
健康检查TCP/HTTP/MYSQL/Client BeatClient BeatTCP/HTTP/gRPC/CmdKeep Alive
负载均衡策略权重/metadata/SelectorRibbonFabio-
雪崩保护
自动注销实例支持支持支持支持
访问协议HTTP/DNSHTTPHTTP/DNSTCP
监听支持支持支持支持支持
多数据中心支持支持支持不支持
跨注册中心同步支持不支持支持不支持
SpringCloud集成支持支持支持支持
Dubbo集成支持不支持支持支持
K8s集成支持不支持支持不支持

Nacos

Nacos是什么

​ 打开网站 Nacos 的首页,我们可以看到下面的内容,写到 Nacos 是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
file

Nacos本地搭建

为了方便我们自己开发调试,我们选择通过自己编译源代码来安装Nacos

1.获取源代码

代码仓库地址:https://github.com/alibaba/nacos.git

通过 git clone拉取最新代码到本地

2、使用IDEA打开Nacos项目

file

3、数据库脚本还原

找到config》resource》META-INF》nacos-db.sql这个数据库脚本是mysql版的脚本,将其还原到数据库服务器上,建立相应的表结构。

4、修改配置

修改console》src》main》resoures》application.properties,填入正确的数据库地址

db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=123456
5、编译

使用 mvn -Prelease-nacos -Dmaven.test.skip=true -Drat.skip=true clean install -U命令编译源代码

6、启动设置

设置启动的JVM参数 -Dnacos.standalone=true
file

7、启动访问

开启Nacos,使用浏览器访问http://127.0.0.1:8848/nacos就可以看到Nacos的网页管理界面了,说明Nacos也开启来了。
file

Nacos和Spring Cloud整合

1、新建微服务

新建一个微服务,然后把该微服务注册到Nacos上去,并通过Nacos进行微服务的相关配置。

添加依赖



Spring boot 版本

<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.16.RELEASE</version>

Spring Cloud 版本

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-dependencies</artifactId>
    <version>Edgware.SR5</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>

Spring Alibaba Cloud 版本

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-alibaba-dependencies</artifactId>
    <version>0.1.1.RELEASE</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>

2、配置文件bootstrap.properties

server.port= 38085
spring.application.name=appName
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.cloud.nacos.discovery.server-addr=106.52.239.153:8848

3、写一个http接口,返回配置文件里的值

@RestController
@RequestMapping("/config")
@RefreshScope
public class ConfigController {

    @Value("${useLocalCache:false}")
    private boolean useLocalCache;

    @RequestMapping("/get")
    public boolean get() {
        return useLocalCache;
    }
}

4、开启应用


开启应用,然后在Nacos的界面里的服务管理下的服务列表可以看到该应用,说明该微服务已经注册到了Nacos。
file

5、访问接口


访问我们应用的接口
http://localhost:38085/config...
可以看到应用读取配置文件里的值
file

然后我们修改Nacos配置文件里的值
file

直接刷新页面发现返回值已经改变

file

欢迎关注我的公众号

本文由博客群发一文多发等运营工具平台 OpenWrite 发布

工程师小哥
1 声望0 粉丝

« 上一篇
Docker的学习