SpringCloud 使用nacos实现服务注册与发现

作用:springboot是单独的项目,而这个作用是让两个独立的springboot项目,能够访问到,实现双方的需求

疑问    子项目中加了relativePath也不会报错   在本地仓库寻找

0. 我的环境  

    Windows10

    JDK8

    SpringCloud:Hoxton.SR1

    SpringBoot:2.2.4.RELEASE

    spring-cloud-alibaba-dependencies:2.1.1.RELEASE(注意:包名是以com.alibaba.cloud开头)

    Nacos-server:NACOS1.1.4

1. Spring Cloud Alibaba介绍

    2018 年 10 月 31 日的凌晨,Spring Cloud Alibaba 正式入驻了 Spring Cloud 官方孵化器,并在 Maven 中央库发布了第一个版本。

    Spring Cloud Alibaba 致力于提供微服务开发的一站式解决方案。此项目包含开发分布式应用服务的必需组件,方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来开发分布式应用服务。

    依托 Spring Cloud Alibaba,您只需要添加一些注解和少量配置,就可以将 Spring Cloud 应用接入阿里分布式应用解决方案,通过阿里中间件来迅速搭建分布式应用系统

    主要功能包括:

    服务限流降级:默认支持 Servlet、Feign、RestTemplate、Dubbo 和 RocketMQ 限流降级功能的接入,可以在运行时通过控制台实时修改限流降级规则,还支持查看限流降级 Metrics 监控。

    服务注册与发现:适配 Spring Cloud 服务注册与发现标准,默认集成了 Ribbon 的支持。

    分布式配置管理:支持分布式系统中的外部化配置,配置更改时自动刷新。

    消息驱动能力:基于 Spring Cloud Stream 为微服务应用构建消息驱动能力。

    分布式事务:使用 @GlobalTransactional 注解, 高效并且对业务零侵入地解决分布式事务问题。。

    阿里云对象存储:阿里云提供的海量、安全、低成本、高可靠的云存储服务。支持在任何应用、任何时间、任何地点存储和访问任意类型的数据。

    分布式任务调度:提供秒级、精准、高可靠、高可用的定时(基于 Cron 表达式)任务调度服务。同时提供分布式的任务执行模型,如网格任务。网格任务支持海量子任务均匀分配到所有 Worker(schedulerx-client)上执行。

    阿里云短信服务:覆盖全球的短信服务,友好、高效、智能的互联化通讯能力,帮助企业迅速搭建客户触达通道    

   组件

   Sentinel:把流量作为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性

   Nacos:一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。

   RocketMQ:一款开源的分布式消息系统,基于高可用分布式集群技术,提供低延时的、高可靠的消息发布与订阅服务

   Dubbo:Apache Dubbo 是一款高性能 Java RPC 框架

   Seata:阿里巴巴开源产品,一个易于使用的高性能微服务分布式事务解决方案

   Alibaba Cloud ACM:一款在分布式架构环境中对应用配置进行集中管理和推送的应用配置中心产品

   Alibaba Cloud OSS: 阿里云对象存储服务(Object Storage Service,简称 OSS),是阿里云提供的海量、安全、低成本、高可靠的云存储服务。您可以在任何应用、任何时间、任何地点存储和访问任意类型的数据

   Alibaba Cloud SchedulerX: 阿里中间件团队开发的一款分布式任务调度产品,提供秒级、精准、高可靠、高可用的定时(基于 Cron 表达式)任务调度服务

   Alibaba Cloud SMS: 覆盖全球的短信服务,友好、高效、智能的互联化通讯能力,帮助企业迅速搭建客户触达通道

2. 启动nacos服务(单机模式&内嵌数据库)

    0.前提:配置环境变量,不配置会导致无法运行Nacos

    1.下载源码或者安装包

       安装包地址:Releases · alibaba/nacos · GitHub

    2.解压后进入nacos/bin目录

    3.输入命令启动服务

       linux:sh startup.sh -m standalone

       windows:cmd startup.cmd

    4.控制台启动下,看到"Nacos started successfully in stand alone mode.”后表示服务已启动

    5.nacos默认使用8848端口,可通过http://127.0.0.1:8848/nacos/index.html进入自带的控制台界面,默认用户名/密码是nacos/nacos  

  

3. 配置集群(略)

    

4. 配置Mysql(单机版)

    默认使用嵌入式数据库,0.7版本以后增加支持mysql数据源能力

   1.初始化nacos相关表:运行conf/nacos-mysql.sql文件

   2.修改conf/application.properties文件,增加支持mysql数据源配置(目前只支持mysql),添加mysql数据源的url、用户名和密码

      spring.datasource.platform=mysql

      # 指定数据库实例数量

      db.num=1

      # 第一个数据库实例地址

      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.配置后输入命令启动服务(参照上文后续启动服务命令)

   注1:直接下载的稳定版本nacos编译后的文件,不支持mysql8及其以上版本,所以要

              db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8mb4&connectTimeout=1000&socketTimeout=3000&autoReconnect=true

   注2:生产环境下nacos持久化的mysql数据库,应该是一个高可以的集群,而非单机版,保存系统的安全性和可用性

5 nacos实现服务注册

    0.启动Nacos Server

    1.添加Nacos的依赖,同时去掉Eureka依赖,另外,还要去掉依赖 spring-cloud-starter-netflix-eureka-client依赖。

       详情见:资料/pom-主模块.xml

       <!--关键依赖如下,一定要注意版本冲突的问题-->

<dependencyManagement>

        <dependencies>

            <dependency>

                <groupId>org.springframework.cloud</groupId>

                <artifactId>spring-cloud-dependencies</artifactId>

                <version>Hoxton.SR1</version>

                <type>pom</type>

                <scope>import</scope>

            </dependency>

            <dependency>

                <groupId>com.alibaba.cloud</groupId>

                <artifactId>spring-cloud-alibaba-dependencies</artifactId>

                <version>2.1.1.RELEASE</version>

                <type>pom</type>

                <scope>import</scope>

            </dependency>

        </dependencies>

    </dependencyManagement>

       

        <!-- 1. nacos-服务发现功能依赖 -->

        <dependency>

            <groupId>org.springframework.cloud</groupId>

            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>

            <version>0.2.2.RELEASE</version>

        </dependency>

        <!-- 2. nacos-配置管理功能依赖,目前用不到 -->

        <!--        <dependency>-->

        <!--            <groupId>org.springframework.cloud</groupId>-->

        <!--            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>-->

        <!--            <version>0.2.2.RELEASE</version>-->

        <!--        </dependency>-->

        注意:版本 0.2.x.RELEASE 对应的是 Spring Boot 2.x 版本,版本 0.1.x.RELEASE 对应的是 Spring Boot 1.x 版本。

                  例如:springboot2.2.4.RELEASE对应0.2.2RELEASE

    2.修改application.properties。添加一些关于Nacos的配置,去掉关于Eureka配置

       #指定nacos的ip和端口号,向nacos注册

       spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848

       注1:nacos更好的访问的方式:不是通过IP,而是通过虚拟域名来访问(建议)

                1.打开hosts,C:\Windows\System32\drivers\etc\hosts,末尾添加1行

                   127.0.0.1        nacos.com           

                   //另外,hosts有可能会报无权限操作,将hosts文件复制到其它位置,修改后再copy覆盖原位置的文件即可       

                2.修改nacos客户端配置

                    spring.cloud.nacos.discovery.server-addr=nacos.com:8848

                      

             

    3.修改启动类更换相关注解。如果在你的应用启动程序启动类加了@EnableEurekaClient ,需将其修改为@EnableDiscoveryClient

       @SpringBootApplication

       //@EnableEurekaClient

       @EnableDiscoveryClient

        public class ProviderApplication {...}

启动你的应用即可,至此,你已实现 “零行代码使用 Nacos 替换 Eureka”!

附录一:dependencyManagement和dependencies的区别

1.dependencies即使在子项目中不写该依赖项,那么子项目仍然会从父项目中继承该依赖项(全部继承)

2.dependencyManagement里只是声明依赖,并不实现引入,因此子项目需要显示的声明需要用的依赖。

   如果不在子项目中声明依赖,是不会从父项目中继承下来的;只有在子项目中写了该依赖项,并且没有指定具体版本,才会从父项目中继承该项,

   并且version和scope都读取自父pom;另外如果子项目中指定了版本号,那么会使用子项目中指定的jar版本

附录二:windows中nacos启动失败,显示8848端口被占用

方案一:重启电脑

方案二:修改nacos/conf/application.properties文件中的端口号,例如:

              server.port=8848   ==>   server.port=18848

附录三:win10系统端口被占用怎解决

1. 开始---->运行---->cmd,以<<<管理员>>>身份调出命令窗口

2. 查看被占用端口对应的PID(即进程ID),输入命令:netstat -aon|findstr "端口号",回车,记下最后一位数字,即PID,

    示例如下:

    #查看端口8005的使用情况

    netstat -aon|findstr "8005"

    #命令窗口显示的数据格式如下:

    TCP    127.0.0.1:8005         0.0.0.0:0              LISTENING       14700

    注1:netstat -ano命令可以用来查看所有端口使用情况,netstat -ano | findstr "8005" 查看指定端口号的使用情况

    注2:cls命令可以用来清屏

3.  根据PID查找进程

     继续输入tasklist|findstr "14700",回车,查看是哪个进程或者程序占用了8005端口,结果是: javaw.exe

     javaw.exe                    14700 Console                    1    313,864 K

4. 此时结果已经很明白了,接下来我们可以到控制面板中的服务区查看此进程,手动关掉它。也可以在cmd中通过命令来关闭它,输入:

    taskkill /f /t /im  javaw.exe

附录四:nacos数据持久化

    Nacos采用了集中式存储的方式来支持集群化部署,目前只要支持MySQL的存储

    配置Nacos的MySQL存储只需要下面三步

    1.安装数据库,版本要求:5.6.5+.  ,原版下载的nacos不支持mysql8.0,因为驱动版本太低,需要从git下载naocs源码自行修改

    2.初始化MySQL数据库,数据库初始化文件:nacos-mysql.sql,该文件可以在Nacos程序包下的conf目录下获得。

    3.修改conf/application.properties文件,增加支持MySQL数据源配置,添加(目前只支持mysql)数据源的url、用户名和密码。配置样例如下

       spring.datasource.platform=mysql

       db.num=1

       db.url.0=jdbc:mysql://localhost:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true

       db.user=root

       db.password=123

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值