其他分享
首页 > 其他分享> > 04-Nacos服务注册中心应用实践

04-Nacos服务注册中心应用实践

作者:互联网

背景分析

在微服务中,首先需要面对的问题就是如何查找服务(软件即服务),其次,就是如何在不同的服务之间进行通信?如何更好更方便的管理应用中的每一个服务,如何建立各个服务之间联系的纽带,由此注册中心诞生(例如淘宝网卖家提供服务,买家调用服务)。
市面上常用注册中心有Zookeeper(雅虎Apache),Eureka(Netfix),Nacos(Alibaba),Consul(Google),那他们分别都有什么特点,我们如何进行选型呢?我们主要从社区活跃度,稳定性,功能,性能等方面进行考虑即可.本次微服务的学习,我们选择Nacos,它很好的支持了阿里的双11活动,不仅可以做注册中心,还可以作为配置中心,稳定性和性能都很好。

Nacos概述

Nacos(DynamicNaming and Configuration Service)是一个应用于服务注册与发现、配置管理的平台。它孵化于阿里巴巴,成长于十年双十一的洪峰考验,沉淀了简单易用、稳定可靠、性能卓越的核心竞争力。其官网地址如下:

https://nacos.io/zh-cn/docs/quick-start.html

 构建Nacos服务

 准备工作

第一:确保你电脑已配置JAVA_HOME环境变量(Nacos启动时需要),例如:

第二:确保你的MySQL版本为5.7以上(MariaDB10.5以上),例如

 

下载与安装

第一步:Nacos下载,可在浏览器直接输入如下地址:

https://github.com/alibaba/nacos/releases

第二步:选择对应版本,直接下载,如图所示:

 第三步:解压Nacos(最好不要解压到中文目录下),其目录结构如下:

初始化配置

第一步:登陆mysql,sql脚本。例如,我们可以使用mysql自带客户端,在命令行首先登录mysql,然后执行如下指令:

 

source E:\app\nacos-server-1.4.2\nacos\conf\nacos-mysql.sql

 执行成功以后,会创建一个nacos_config数据库,打开数据库会看到一些表,例如;

说明:在执行此文件时,要求mysql的版本大于5.7版本(MariaDB最好10.5.11),否则会出现如下错误:

第二步:打开/conf/application.properties里打开默认配置,并基于你当前环境配置要连接的数据库,连接数据库时使用的用户名和密码(假如前面有"#"要将其去掉): 

### If use MySQL as datasource:
spring.datasource.platform=mysql

### Count of DB:
db.num=1

### Connect URL of DB:
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=123456

nacos 服务启动与访问

第一步:启动Nacos服务。

Linux/Unix/Mac启动命令(standalone代表着单机模式运行,非集群模式):

./startup.sh -m standalone

 Windows启动命令(standalone代表着单机模式运行,非集群模式):

startup.cmd -m standalone

 

说明:
1)执行执行令时要么配置环境变量,要么直接在nacos/bin目录下去执行.
2)nacos启动时需要本地环境变量中配置了JAVA_HOME(对应jdk的安装目录),
3)一定要确保你连接的数据库(nacos_config)是存在的.
4)假如所有的配置都正确,还连不上,检查一下你有几个数据库(mysql,…)

第二步:访问Nacos服务。

打开浏览器,输入http://localhost:8848/nacos地址,出现如下登陆页面:

 

其中,默认账号密码为nacos/nacos.

服务注册与调用入门(重点)

 业务描述

创建两个项目Module分别为服务提供者和服务消费者(假如已有则无需创建),两者都要注册到NacosServer中(这个server本质上就是一个web服务,端口默认为8848),然后服务提供者可以为服务消费者提供远端调用服务(例如支付服务为服务提供方,订单服务为服务消费方),如图所示:

 

生产者服务创建及注册

第一步:创建服务提供者工程(module名为sca-provider,假如已有则无需创建),继承parent工程(01-sca),其pom.xml文件内容如下:

discovery像一个客户端,向nacos不断发送心跳包

<?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">
    <parent>
        <artifactId>01-sca</artifactId>
        <groupId>com.jt</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>sca-provider</artifactId>
<dependencies>
    <!--基于springboot 工程的web服务依赖-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <!--基于alibaba的nacos实现服务注册管理,当添加了此依赖后,系统
        启动时会向nacos服务发送一些心跳包,进行服务注册,当我们项目中
        添加了这样的一个依赖,就表示此项目是nacos服务的一个客户端对象-->
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>
</dependencies>

</project>

 第二步:创建并修改配置文件application.yml(或者application.properties),实现服务注册,关键代码如下:

#服务的端口
server:
  port: 8081
#服务名
spring:
  application:
    name: sca-provider
#服务注册地址(服务启动时向配置的地址发送心跳包,一般是每隔5秒发送一次,服务启动时向配置地址发送心跳包)
#  cloud:
#    nacos:
#      discovery:
#        server-addr: localhost:8848  将来nacos会在一台独立的机器上进行部署

注意:服务名不要使用下划线(“_”),应使用横杠(“-”),这是规则。
第三步:创建启动类(假如已有则无需定义),关键代码如下:

package com.jt;

@SpringBootApplication
public class ProviderApplication {

    public static void main(String[] args) {
        SpringApplication.run(ProviderApplication.class, args);
    }
  }

 第四步:启动启动类,然后刷先nacos服务,检测是否服务注册成功,如图所示:

 

第五步:停掉sca-provider服务,然后不断刷新nacos服务列表,检查服务的健康状态。

补充:

 

ctrl +n查找类 

消费者服务发现及调用

第一步: 在sca-provider项目中创建服务提供方对象,基于此对象对外提供服务,例如:

 

标签:服务,04,sca,Nacos,nacos,注册,mysql
来源: https://blog.csdn.net/weixin_43762083/article/details/123255755