前言
最近笔者在对微服务架构进行学习,参考了各种项目的技术文章、框架文档以及视频网站,最终选择使用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项目作为聚合服务。如下图所示:
分别建立Consumer、Provider、Gateway服务。注意在新增时选择Module,引入依赖需要勾选Spring Web,如下图所示:
创建完成后项目结构图(记得在父Pom文件中引入子Model)如下:
建立公共Model,将公用的Maven依赖引入后,给其他Model使用,项目上右键选择新建Model,选择为Maven项目,父类为cloud,如下图所示:
在另外的consumer、provider、gateway三个Pom.xml文件中引入相关的common模块,如下图:
修改三个子项目下的application.properties为application.yml(可以根据自己的习惯来决定是否要更改)。
集成Nacos进行服务注册、发现和作为配置中心
首先从Github上下载Nacos,如下图所示:
关于新版的Nacos有个坑,就是引入了集群的方式,如果直接启动Java服务会报错然后闪退,解决方案如下:
方案一:关掉集群启动的模式,打开nacos安装目录下的bin目录,在bin目录下有个startup.cmd,以文本格式来编辑它,修改其中的参数,将集群模式启动替换为单机启动
#set MODE="cluster" #集群启动
set MODE="standalone" #单机启动
方案二:以集群模式启动,打开nacos安装目录下的conf,编辑其中的application.properties文件,修改其中的数据库相关配置,如下图所示:
本项目由于是自己练手暂时使用所以直接采取了方案一,简单的单机模式启动Nacos。双击bin目录下的startup.bat命令来启动Nacos,Nacos启动成功,本地的访问地址为localhost:8848/nacos,启动成功效果图如下:
打开Nacos官网,查看相关文档,根据文档中的描述为在commmon模块中的Pom.xml文件引入相关的注册中心和配置中心依赖依赖,详细的版本可以去mavenrepository自己搜索合适自己项目的,也可以去官网获取最新的版本
<!-- nacos注册中心 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>${nacos.version}</version>
</dependency>
<!-- nacos配置中心 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>${nacos.version}</version>
</dependency>
编写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对服务进行隔离划分,能够很好的分化开各个微服务项目组之间的关系。