简介
- 微服务描述了一种将软件应用程序设计为可独立部署的服务套件的特定方式。通常一个独立的功能就能部署为一个微服务,一组微服务可以部署在一台物理节点上,多台微服务构成的物理节点构成一个微服务集群。
环境搭建
- 配置本地Maven仓库地址
在eclipse的maven配置页配置本地仓库地址:
http://10.10.108.114:9999/nexus/content/groups/public/
或者使用统一的maven配置文件 - 下载框架工程
使用svn下载初始化开发工程
建立一个新项目
开发注意事项
微服务是一个集群,开发时应该注意有状态的业务处理,在需要使用同步锁的地方考虑使用分布式同步锁。平台提供的通用组件
数据库:db-spring-boot-starter项目工程
日志:log-spring-boot-starter项目工程
Redis:redis-spring-boot-starter项目工程
接口文档生成工具:swagger2-spring-boot-starter工程项目目录说明
在微服务开发过程中推荐使用以下目录结构:
config:建议放置配置内容
controller:微服务的控制器类目录
service:微服务的Service类目录
mapper:数据库操作类的目录
model:数据模型目录建立新项目
(1)新建项目
新建一个Spring maven项目放置在business目录下,开发方式基本上同普通的spring项目一致,特别要注意的是这是一个分布式项目,在分布式事物处理上要特别注意。
添加平台提供的依赖项目
(2)复制Demo项目
可以通过复制提供的demo项目,放置在business目录下,快速的开始一个新项目,记得更改项目的artifactId等
Nacos开发配置
命名空间配置说明
项目中使用命名空间区分开发环境,可以通过以下配置来实现:
spring.cloud.nacos.config.namespace=b3404bc0-d7dc-4855-b519-570ed34b62d7
spring.cloud.nacos.discovery.namespace=b3404bc0-d7dc-4855-b519-570ed34b62d7
该配置必须放在 bootstrap.properties 文件中。此外 spring.cloud.nacos.config.namespace 的值是 namespace 对应的 id,id 值可以在 Nacos 的控制台获取。并且在添加配置时注意不要选择其他的 namespace,否则将会导致读取不到正确的配置。
命名空间配置规则
- 各个环境的命名空间命名规则: ProjectName_ns_XXX
- 开发环境:每个开发者在Nacos上建立自己以工号为后缀的命名空间,例如:hx_open_ns_ab002001。开发的时候使用自己的命名空间进行开发调试
- dat,uat,vir 环境:后缀名为dat,uat,vir.例如hx_open_ns_dat,hx_open_ns_uat,hx_open_ns_vir
- 生产环境:使用后缀名为pro. 例如hx_open_ns_pro
Group和DataID配置规则
不同命名空间下可以有相同的Group和DataID。因此项目中我们使用命名空间区分不同的环境,从而可以共享部分配置。
Group命名规则:
Group统一命名为:ProjectName_group_XXX
例如:hx_open_group_medium
环境特殊配置命名为:ProjectName_group_ENV_XXX
例如:hx_open_group_dat_testDataID命名规则:
DataID统一命名为:ProjectName_dataid_XXX
例如:hx_open_dataid_initcfg
环境特殊配置命名为:ProjectName_dataid_ENV_XXX
例如:hx_open_dataid_dat_test
Actuator Endpoints
引入包之后,项目自动就支持Actuator,不需要配置。
TODO:后续监控显示模块的对接
开发规范
maven规范
除了根工程的pom.xml之外,子工程的pom.xml引入的jar都不予许设置version属性
-
新增加jar包依赖的步骤如下
- 先查看父工程/根工程是否已引入该jar
- 查看根工程的dependencyManagement是否已经有该jar的管理
- 如果没有则查看以下地址的Appendix A. Dependency versions 是否有该jar的管理
https://docs.spring.io/platform/docs/Cairo-SR3/reference/htmlsingle/
4. 都没有的话则自己添加该jar的管理,先去根工程的properties里添加版本号,再去dependencyManagement里添加该jar
接口规范
- 按照restful接口设计规范
GET (SELECT):从服务器检索特定资源,或资源列表。
POST (CREATE):在服务器上创建一个新的资源。
PUT (UPDATE):更新服务器上的资源,提供整个资源。
PATCH (UPDATE):更新服务器上的资源,仅提供更改的属性。
DELETE (DELETE):从服务器删除资源。
- 接口尽量使用名词,禁止使用动词,下面是一些例子
GET /zoos:列出所有动物园
POST /zoos:新建一个动物园
GET /zoos/{id}:获取某个指定动物园的信息
PUT /zoos/{id}:更新某个指定动物园的信息(提供该动物园的全部信息)
PATCH /zoos/{id}:更新某个指定动物园的信息(提供该动物园的部分信息)
DELETE /zoos/{id}:删除某个动物园
GET /zoos/{id}/animals:列出某个指定动物园的所有动物
DELETE /zoos/{zId}/animals/{aId}:删除某个指定动物园的指定动物
- 反例:
/getAllCars
/createNewCar
/deleteAllRedCars
后端返回JSON
- 后端统一返回 com.hxhealth.common.model.Result 对象
- datas:具体响应的其他信息
- resp_code:响应码,目前0是成功、1是失败
- resp_msg:响应消息