微服务与分布式架构之nacos注册中心安装与配置

微服务与分布式架构系统下的服务注册与发现是一个关键的环节,阿里提供的nacos以其安装与配置简单、功能强大而著称,是当前微服务与分布式项目开发中微服务治理工具的首选。

一、nacos简介

1、是阿里开源,遵循CAP中的AP原则

2、注册中心应用

3、配置中心应用

二、nacos服务的安装与配置

1、nacos下载

  • 全称是什么?

Naming Configuration Service,中文为“命名配置服务”。

  • nacos是什么?

是注册中心+配置中心+配置总线功能的组合,这里只介绍注册中心功能,其数据存储在内存中

  • 去哪儿下载?

下载地址:Releases · alibaba/nacos · GitHub

官网文档:Redirecting to: https://nacos.io/

2、nacos在Windows中安装与配置

windows下只是为了开发方便,使用的是单机模式,nacos的windows版本默认使用的就是单机模式。

(1)将解压后的nacos文件夹,拷贝到D\programd中

(2)在nacos的bin目录中,双击startup.cmd启动服务

(3)登录nacos管理页,用户名与密码都为nacos

3、nacos在Linux中安装与配置参考

在生产环境中,nacos肯定是集群模式,nacos至少三个节点才能构成集群,节点中的数据存储在mysql中。

3.1 Linux安装jdk1.8或以上版本

安装参考本站:Linux与CentOS系统管理及网络服务应用技巧-CSDN博客

3.2 修改bin/startup.sh文件

1、启动方式默认就是集群,不必修改export MODE="cluster"

2、nacos启动默认使用jvm内存2个g,如果服务器内存不足,可调整内存大小

JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=128m"

3.3 数据库初始化修改conf/application.properties

修改端口号,端口号分别为8848,8849,8850

server.port=8848

mysql持久

创建数据库

# 选择mysql持久化
spring.datasource.platform=mysql
# 数据库数量
db.num=1
spring.datasource.platform=mysql
# 数据连接配置
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=123

3.4 集群配置

1、设置集群地址

改名把conf/cluster.conf.example 改为为cluster.conf

设置ip和端口

2、产生三个服务

mv nacos/ nacos8848

cp -r nacos8848/ nacos8850

cp -r nacos8848/ nacos8849

3、修改后两个端口号

vi   nacos8849/conf/application.propertiesserver.port=8849

vi   nacos8850/conf/application.propertiesserver.port=8850

4、启动,依次执行如下命令

nacos8848/bin/startup.sh

nacos8849/bin/startup.sh

nacos8850/bin/startup.sh

5、测试,访问任意一个节点,输入帐号和密码,默认是nacos,观察集群管理中的节点列表http://192.168.188.107:8850/nacos

192.168.188.107:8848
192.168.188.107:8849
192.168.188.107:8850

三、nacos工作原理

1、服务注册

注册服务服务提供者client向nacos注册自己的服务信息(如:自己的ip,端口,服务名等信息),nacos会把这些信息存储在一个map中。

服务心跳client在注册后,会使用定时器默认每5秒向nacos发送一次心跳,用来说明本client是活跃状态。

2、服务发现

获取服务信息消费者client在调用服务提供者时,会向nacos发送请求,获取指定服务的注册数据,并缓存在client本地。

定时更新消费者开启一个定时器任务,拉取nacos最新的服务列表到本地缓存。

3、nacos服务

集群nacos集群之间会相互同步数据,在一至性方面,默认是ap,也可切换到cp。

建康检查nacos会定时检查已注册的服务实例的建康信息,如果超过15s都没有某实例的心跳,会将其healthy值设置为false,这种状态的服务信息不会在服务发现时获取,如果nacos超过30s都没收到该实例的心跳,会从服务列表中剔除,直到该实例恢复了心跳则重新注册。

四、nacos的应用

创建Spring boot的project项目,名称为mynacos,在此项目下分别创建两个module:provider与consumer

1、注册服务

创建一个module模块,名称为provider服务提供者,并进行配置。

  • pom文件
<dependency>
  <groupId>com.alibaba.cloud</groupId>
  <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
  • yml文件
server:
  port: 8001

mybatis:
  type-aliases-package: com.mysoft.beans
  mapper-locations: [classpath:mapper/**/*.xml]
spring:
   application:
      name: provider-dept # 在注册中心上显示的服务名
   cloud:
      nacos:
        discovery:
          server-addr: localhost:8848 # nacos地址,如果没有配置nacos地址,则默认就是localhost:8848
   datasource: # 数据库连接池与数据库配置
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/mydb
    username: root
    password: 1234
  • 主类添加注解:@EnableDiscoveryClient用于服务发现
@EnableDiscoveryClient
@SpringBootApplication
public class ProviderApplication {
    public static void main(String[] args) {
        SpringApplication.run(ProviderApplication.class, args);
        System.out.println("提供者");
    }
  • 启动该provider,观看nacos服务管理列表中是否有服务注册

2、发现服务

创建一个module模块,名称consumer服务消费者,并进行配置。

  • pom文件
<dependency>
  <groupId>com.alibaba.cloud</groupId>
  <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
  • yml文件
server:
 port: 80
spring:
 application:
  name: consumer-na
 cloud:
  nacos:
    discovery:
      server-addr: 127.0.0.1:8848
  • 主类添加注解@EnableFeignClients
@EnableFeignClients
@SpringBootApplication
public class ConsumerApplication {

    public static void main(String[] args) {
        SpringApplication.run(ConsumerApplication.class, args);
        //默认为提供者,可以通过Java设置为消费模式
        System.out.println("消费者");
    }
}
  • controller类
@RestController
public class DeptController_Consumer {
    //static String url="http://localhost:8001";
    static String url="http://provider-dept";
    @Autowired
    RestTemplate tmp;

    @RequestMapping("/consumer/dept/get/{id}")
    public Dept get(@PathVariable Integer id){
        System.out.println("id:"+id);
        return tmp.getForObject(url+"/dept/get/"+id,Dept.class);
    }
    @RequestMapping("/consumer/dept/list")
    public List<Dept> list(){
        return tmp.getForObject(url+"/dept",List.class);
    }
}
  • 修改配置类
@Configuration
public class ConfigBean {
    @Bean
    //loadBalanced作用:在发起http请求时,会到注册中心读取服务对应的ip列表
    @LoadBalanced
    public RestTemplate getRestTmp(){
        return new RestTemplate();
    }
}
  • 启动该consumer,观看nacos服务管理列表中是否有服务注册

3、测试一下

浏览器地址栏输入:localhost/consumer/dept/list

更多精彩内容请关注本站!!!

  • 21
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值