紧接上文《从0到1 手把手搭建spring cloud alibaba 微服务大型应用(一) (mini-cloud) 整体架构图》
本文主要说的是开始着手创建项目,我们按照架构图,第一个创建的应该是注册中心
有人会觉得奇怪,nacos注册中心不是一个zip包嘛,解压了就直接可以双击运行了,但是我觉得这样不太友好,以源码形式集成入项目把nacos ,这里叫register-center当作其中一个服务,既方便自定义开发又方便debug,所以本文主要对如何创建自定义源码启动的nacos 服务进行一步步详细的描述,大体的过程是如下步骤:
##1. 选择版本 clone nacos 代码
##2. 部署mysql 数据库脚本
##3. 源码启动nacos
##4. 新建mini-cloud 项目
##5. 新建register-center 注册中心服务
##6. install nacos 依赖jar
##7. 剪裁nacos pom 到mini-cloud
##8. copy nacos-console 代码到register-center
##9. 验证nacos 服务
首先我们来下载nacos,我这里选的是1.4.1,因为之前开发时用的就是这个版本,大家可以换成自己需要的源码版本 GitHub - alibaba/nacos at 1.4.1
下载好后导入到开发工具里面并且引入maven 完成后如下图
红框的为启动main 服务
为了让nacos源码可以顺利启动,我们需要部署一份mysql 脚本,脚本在这里
大家新创建一个数据库然后导入脚本,我创建的数据库名字叫做nacos_mini_cloud,大家可以改成自己的名称
数据库创建完成后,开始启动源码,启动之前需要设置一下启动模式为单机模式,具体部署的时候需要设置为集群模式,不在本文范围,后续有单独说明,单机模式具体位置加在这里
System.setProperty("nacos.standalone", "true");
System.setProperty("nacos.core.auth.enabled", "false");
然后配置一下数据库连接地址,记得改成刚刚创建的数据库
改好配置之后,我们启动nacos
启动没问题,然后我们访问http://localhost:8848/nacos 看一下,用户名密码默认为 nacos nacos
80是我本机的ip,也没有问题,这样我们首先在nacos自己的源码启动成功了
下面我们准备剪裁集成源码到我们自己的项目里面,首先我们需要先创建一个项目和一个注册中心服务,因为我们要搭建的是一个微服务框架,所以不会一个服务一个项目,需要创建一个项目并把各个组件以module形式集成
我创建的项目名叫mini-cloud ,注册中心的服务名称叫做register-center 都是空项目,创建好后的目录结构如下
然后我们开始移植nacos-console 启动所需的pom依赖到我们自己的项目里,首先看看它主要需要哪些依赖
主要是这三个依赖,那么我们首先需要将源码install一下,让这几个源码变为jar包,另外大家要注意俩项目要使用同样的本地maven库,不然install之后的jar无法被新项目引用到
然后将所有nacos 根pom 以及nacos-console pom文件依赖都拷贝到自己的新项目
mini-cloud pom 以及register-center pom内,如下图
为了方便大家我直接整体贴出来两个pom
根pom
4.0.0
org.mini-cloud
mini-cloud
pom
1.0-SNAPSHOT
register-center
1.4.1
com.alibaba.nacos
UTF-8
UTF-8
1.8
1.8
false
true
jacoco
${project.basedir}/../test/target/jacoco-it.exec
file:**/generated-sources/**,**/test/**
2.2
1.0.2
2.7
1.4.1
3.5.1
2.10.4
3.0.1
3.8
0.12
3.0.2
4.3.0
0.7.8
2.20
3.0.4
3.0.2
1.6
2.19.1
3.0.0
3.1.1
1.0-beta-4
1.3.0
2.2.6.RELEASE
3.0
3.4
2.2
3.2.2
1.2
1.4
1.2
1.7.7
1.2.3
2.13.3
4.4.1
4.5
4.1.3
8.0.16
10.14.2.0
2.1
1.0
2.10.4
2.10.4
1.9.13
0.11.2
4.1.42.Final
4.1.31.Final
2.0.0-RC1
24.1.1-jre
1.2
0.4.1
1.24.0
1.17.0
3.8.0
1.24.0
4.0.63
0.9.11
1.10.19
1.3
0.5.0
9.0.37
0.30
3.4.2
1.3.5
1.3.5
org.springframework.boot
spring-boot-dependencies
${spring-boot-dependencies.version}
pom
import
${nacos-name}
nacos-config
${nacos-version}
${nacos-name}
nacos-core
${nacos-version}
${nacos-name}
nacos-naming
${nacos-version}
${nacos-name}
nacos-api
${nacos-version}
${project.groupId}
nacos-client
${nacos-version}
${project.groupId}
nacos-common
${nacos-version}
${project.groupId}
nacos-cmdb
${nacos-version}
${project.groupId}
nacos-console
${nacos-version}
${project.groupId}
nacos-distribution
${nacos-version}
${nacos-name}
nacos-address
${nacos-version}
${nacos-name}
nacos-istio
${nacos-version}
${project.groupId}
nacos-consistency
${nacos-version}
${nacos-name}
nacos-auth
${nacos-version}
${nacos-name}
nacos-sys
${nacos-version}
javax.servlet
servlet-api
${servlet-api.version}
provided
com.zaxxer
HikariCP
${HikariCP.version}
com.caucho
hessian
${hessian.version}
org.apache.commons
commons-lang3
${commons-lang3.version}
commons-io
commons-io
${commons-io.version}
commons-collections
commons-collections
${commons-collections.version}
commons-logging
commons-logging
${commons-logging.version}
commons-dbcp
commons-dbcp
${commons-dbcp.version}
commons-cli
commons-cli
${commons-cli.version}
org.slf4j
slf4j-api
${slf4j-api.version}
ch.qos.logback
logback-classic
${logback.version}
ch.qos.logback
logback-core
${logback.version}
org.apache.logging.log4j
log4j-core
${log4j.version}
org.apache.logging.log4j
log4j-api
${log4j.version}
org.apache.logging.log4j
log4j-slf4j-impl
${log4j.version}
org.apache.httpcomponents
httpcore
${httpcore.version}
org.apache.httpcomponents
httpclient
${httpclient.version}
commons-logging
commons-logging
org.apache.httpcomponents
httpasyncclient
${httpasyncclient.version}
mysql
mysql-connector-java
${mysql-connector-java.version}
org.apache.derby
derby
${derby.version}
com.alipay.sofa
jraft-core
${jraft-core.version}
com.alipay.sofa
bolt
org.apache.logging.log4j
log4j-api
org.apache.logging.log4j
log4j-core
org.apache.logging.log4j
log4j-slf4j-impl
org.apache.logging.log4j
log4j-jcl
com.alipay.sofa
rpc-grpc-impl
${rpc-grpc-impl.version}
cglib
cglib-nodep
${cglib-nodep.version}
net.jcip
jcip-annotations
${jcip-annotations.version}
com.fasterxml.jackson.core
jackson-core
${jackson-core.version}
com.fasterxml.jackson.core
jackson-databind
${jackson-databind.version}
org.codehaus.jackson
jackson-core-asl
${jackson-core-asl.version}
io.jsonwebtoken
jjwt-api
${jjwt.version}
io.jsonwebtoken
jjwt-impl
${jjwt.version}
runtime
io.jsonwebtoken
jjwt-jackson
${jjwt.version}
runtime
io.netty
netty-all
${netty-all.version}
io.netty
netty-common
${netty-common.version}
org.apache.mina
mina-core
${mina-core.version}
com.google.guava
guava
${guava.version}
org.javatuples
javatuples
${javatuples.version}
com.github.keran213539
commonOkHttp
${commonOkHttp.version}
test
io.grpc
grpc-netty-shaded
${grpc-java.version}
io.grpc
grpc-protobuf
${grpc-java.version}
io.grpc
grpc-stub
${grpc-java.version}
io.grpc
protoc-gen-grpc-java
${grpc-java.version}
pom
com.google.api.grpc
proto-google-common-protos
${proto-google-common-protos.version}
com.google.protobuf
protobuf-java
${protobuf-java.version}
org.reflections
reflections
${reflections.version}
org.mockito
mockito-all
${mockito-all.version}
org.hamcrest
hamcrest-all
${hamcrest-all.version}
io.prometheus
simpleclient
${prometheus-simpleclient.version}
org.apache.tomcat.embed
tomcat-embed-jasper
${tomcat-embed-jasper.version}
com.google.truth
truth
${truth.version}
sona
https://oss.sonatype.org/content/repositories/snapshots/
sona
https://oss.sonatype.org/service/local/staging/deploy/maven2/
register-center pom
mini-cloud
org.mini-cloud
1.0-SNAPSHOT
4.0.0
register-center
jar
http://nacos.io
UTF-8
org.springframework.boot
spring-boot-starter-web
com.alibaba.nacos
nacos-api
com.alibaba.nacos
nacos-core
com.google.guava
guava
org.springframework.boot
spring-boot-starter-jdbc
commons-io
commons-io
mysql
mysql-connector-java
org.apache.derby
derby
ch.qos.logback
logback-classic
org.aspectj
aspectjrt
cglib
cglib-nodep
org.apache.httpcomponents
httpasyncclient
org.springframework.boot
spring-boot-starter-tomcat
com.fasterxml.jackson.core
jackson-core
com.fasterxml.jackson.core
jackson-databind
net.jcip
jcip-annotations
true
org.apache.commons
commons-lang3
io.micrometer
micrometer-registry-prometheus
io.micrometer
micrometer-registry-influx
io.micrometer
micrometer-registry-elastic
org.springframework.boot
spring-boot-starter-aop
org.springframework.boot
spring-boot-starter-actuator
com.alibaba.nacos
nacos-config
1.4.1
org.apache.tomcat.embed
tomcat-embed-jasper
com.alibaba.nacos
nacos-naming
1.4.1
com.alibaba.nacos
nacos-istio
1.4.1
org.slf4j
log4j-over-slf4j
org.slf4j
jcl-over-slf4j
org.slf4j
jul-to-slf4j
org.mockito
mockito-core
test
org.springframework.boot
spring-boot-starter-security
org.springframework.boot
spring-boot-maven-plugin
2.1.17.RELEASE
repackage
src/main/resources
static/console-ui/.vscode/**
org.codehaus.mojo
findbugs-maven-plugin
org.apache.maven.plugins
maven-assembly-plugin
jar-with-dependencies
然后拷贝nacos-console 代码到register-center 内
记得将这个dir 路径设置上值
然后我们直接启动register-center 看看效果
ok 没有问题,然后我们再浏览器访问看看效果
也没有问题,为了确保没问题我们自己用命令向nacos 注册一个临时服务试试
具体命令
curl -X POST 'http://192.168.1.80:8848/nacos/v1/ns/instance?serviceName=nacos.naming.serviceName&ip=20.18.7.10&port=8080'
我用的是在一个linux向我本机发起注册
然后看看下效果
确实注册完毕,那么我们的注册中心服务就搭建完成了,因为是演示,所以会有些粗糙,大家见谅