微服务初体验(一):整合Nacos进行服务注册和项目初始化

前言

最近笔者在对微服务架构进行学习,参考了各种项目的技术文章、框架文档以及视频网站,最终选择使用Nacos+Dubbo+Gateway+Sentinel来搭建一个项目练手。其中Nacos作为服务的注册发现中心兼配置中心,Dubbo作为RPC通讯框架来实现服务间的接口调用,而Gateway则作为网关,进行客户端请求的转发,熔断服务则使用Sentinel框架。后续会加入ElasticSearch+SpringSession,进行数据的缓存分级,链路追踪则使用Sleuth,其中还会组合分布式事务框架Seata,有兴趣的朋友可以关注一下,项目地址:https://github.com/peachl/cloud-demo/tree/master#readme,长期更新。

初始化项目结构

首先新建一个Maven工程,并删除其中多余的src文件,将当前Maven项目作为聚合服务。如下图所示:


新建Maven工程

填写项目名称和组织名称以及版本号

删除多余的SRC目录

分别建立Consumer、Provider、Gateway服务。注意在新增时选择Module,引入依赖需要勾选Spring Web,如下图所示:


注意新增时选择Module

选择创建SpringBoot项目

修改服务的名称、组织名称和版本号等属性

引入Spring Web

创建完成后项目结构图(记得在父Pom文件中引入子Model)如下:
当父项目名称后出现(root)时说明项目结构正常,可以通过对cloud操作所有的子模块统一进行clean、package等操作

建立公共Model,将公用的Maven依赖引入后,给其他Model使用,项目上右键选择新建Model,选择为Maven项目,父类为cloud,如下图所示:


公共模块

在另外的consumer、provider、gateway三个Pom.xml文件中引入相关的common模块,如下图:
引入公共依赖

修改三个子项目下的application.properties为application.yml(可以根据自己的习惯来决定是否要更改)。

集成Nacos进行服务注册、发现和作为配置中心

首先从Github上下载Nacos,如下图所示:

选择对应的Windows版本下载即可

关于新版的Nacos有个坑,就是引入了集群的方式,如果直接启动Java服务会报错然后闪退,解决方案如下:
方案一:关掉集群启动的模式,打开nacos安装目录下的bin目录,在bin目录下有个startup.cmd,以文本格式来编辑它,修改其中的参数,将集群模式启动替换为单机启动
启动命令

#set MODE="cluster"   #集群启动
set MODE="standalone"   #单机启动

方案二:以集群模式启动,打开nacos安装目录下的conf,编辑其中的application.properties文件,修改其中的数据库相关配置,如下图所示:

application.properties文件

数据库配置

本项目由于是自己练手暂时使用所以直接采取了方案一,简单的单机模式启动Nacos。双击bin目录下的startup.bat命令来启动Nacos,Nacos启动成功,本地的访问地址为localhost:8848/nacos,启动成功效果图如下:
nacos启动成功

访问本地nacos地址,账号、密码都是nacos

打开Nacos官网,查看相关文档,根据文档中的描述为在commmon模块中的Pom.xml文件引入相关的注册中心和配置中心依赖依赖,详细的版本可以去mavenrepository自己搜索合适自己项目的,也可以去官网获取最新的版本

        
        
            com.alibaba.cloud
            spring-cloud-starter-alibaba-nacos-discovery
            ${nacos.version}
        

        
        
            com.alibaba.cloud
            spring-cloud-starter-alibaba-nacos-config
            ${nacos.version}
        

编写consumer相关的yml文件,记得编写yml的时候记得把注册中心和配置中心都写进去,也可以使用namespace进行服务之间的隔离,但是此处就不详细演示了

server:
  port: 8011
spring:
  application:
    name: consumer
  cloud:
    nacos:
      discovery:
        #注册中心地址
        server-addr: http://localhost:8848
      config:
        #注册中心地址
        server-addr: http://localhost:8848

编写provider相关的yml文件

server:
  port: 8010
spring:
  application:
    name: provider
  cloud:
    nacos:
      discovery:
        #注册中心地址
        server-addr: http://localhost:8848
      config:
        #配置中心地址
        server-addr: http://localhost:8848
        file-extension: yaml

编写gateway相关的yml文件

server:
  port: 80

spring:
  application:
    name: gateway

  cloud:
    nacos:
      discovery:
        #注册中心地址
        server-addr: 127.0.0.1:8848

在idea中使用快捷键alt+8,对服务进行集体管控,选择项目集体启动,如果电脑内存不是很充裕的话,建议设置Spring boot项目的Jvm初始大小,否则同时启动的话电脑容易死机


选择需要管理的服务类型
选择项目并启动

启动成功之后,进入nacos的web展示页查看服务注册状态,如下图所示消费者、生产者、网关服务均注册完毕,至此使用Nacos进行服务注册和项目的初始化均已完成

服务发现列表,上述的生产者、消费者、网关服务均已注册完毕
后记

很奇怪的一点是官方文档上面说是需要在启动类上写明@EnableDiscoveryClient注解,但是笔者没有在启动类中引入这个注解,服务注册发现功能还是正常实现了。如果各位大佬有自己的看法可以留言交流一下。

好了初步的Nacos服务注册已经实现了,其实Nacos还可以根据namespace对服务进行隔离划分,能够很好的分化开各个微服务项目组之间的关系。

你可能感兴趣的:(微服务初体验(一):整合Nacos进行服务注册和项目初始化)