JHipster生成微服务架构的应用栈(三)- 业务微服务示例

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
云原生网关 MSE Higress,422元/月
注册配置 MSE Nacos/ZooKeeper,118元/月
简介: 本系列文章演示如何用JHipster生成一个微服务架构风格的应用栈。环境需求:安装好JHipster开发环境的CentOS 7.4(参考这里)应用栈名称:appstack认证微服务: uaa业务微服务:microservice1网关微服务:gateway实体名:role主机IP:192.

本系列文章演示如何用JHipster生成一个微服务架构风格的应用栈。
环境需求:安装好JHipster开发环境的CentOS 7.4(参考这里
应用栈名称:appstack
认证微服务: uaa
业务微服务:microservice1
网关微服务:gateway
实体名:role
主机IP:192.168.220.120

1 生成业务微服务的工程代码

进入appstack/microservice1目录,输入命令后回车:

$ cd appstack/microservice1/
$ jhipster

命令行输出JHipster启动信息

img_aa038c88a9a10cbbbedf6b5cc2dd7295.png

现在开始问答环节

1.1 Which type of application would you like to create?

选择生成的微服务类型
这是一个单选题,有4个选项,使用上下键切换选项。
这里选择Microservice application,所有自定义业务逻辑的微服务都可以选择这个类型。

img_f0481cbfaf33d2262af321909b4f3bcd.png

单击回车继续。

1.2 What is the base name of your application?

输入微服务的名称
默认名称是当前目录名microservice1,也可以自己输入名称。
注意:名称只能是大小写字母,数字和下划线的任意组合,不允许任何其它字符。

img_fffb13f02b54963343489fc14da4116a.png

单击回车继续。

1.3 As you are running in a microservice architecture, on which port would like your server to run? It should be unique to avoid port conflicts.

输入微服务的端口号
默认端口号是8081,也可以自己输入端口号,注意不要和别的微服务和进程的端口号冲突。

img_3225cd1402bbdf63fda0b2c17fa7dff1.png

单击回车继续。

1.4 What is your default Java package name?

输入微服务的java包名
根据整个应用栈的目录层级,这里输入包名com.mycompany.appstack
注意:包名要符合Java标准规范的要求。

img_540959622bf4913634ed7388c8c10460.png

单击回车继续。

1.5 Which service discovery server do you want to use?

选择一个服务发现组件
这是一个单选题,有3个选项,使用上下键切换选项。
根据微服务体系规划,这里选择JHipster Registry

img_cb925550a4082d8b4f4148dd973170cb.png

单击回车继续。

1.6 Which type of authentication would you like to use?

选择使用的认证类型
这是一个单选题,有3个选项,使用上下键切换选项。
根据微服务体系规划,这里选择Authentication with JHipster UAA server (the server must be generated separately)

img_1c733e067d6b393ffcdc0ff8e6bf28b2.png

单击回车继续。

1.7 What is the folder path of your UAA application?

输入uaa微服务所在的路径
这是一个相对于microservice1的相对路径,默认路径是../uaa,这就是我们之前生成uaa工程的目录所在;如果之前生成的uaa目录名是myuaa,那么这里要输入../myuaa
注意:这个问题和上一个问题(1.6)的选择有关联性,上一个问题的不同选择,会导致后续不同问题的出现。

img_b32899c3ad64bd5c301a14b55e735c25.png

单击回车继续。

1.8 Which type of database would you like to use?

选择使用的数据库类型
这是一个单选题,有4个选项,使用上下键切换选项。
可以看到支持的数据库类型很多,这里选择默认选项SQL

img_603f74e90e9ac1aae79a48f094a50d2d.png

单击回车继续。

1.9 Which production database would you like to use?

选择生产环境中使用的数据库
这是一个单选题,有5个选项,使用上下键切换选项。
可以看到目前支持5种SQL数据库,这里选择默认选项MySQL

img_00e6296e8812bbdc66fbb4b14357764b.png

单击回车继续。

1.10 Which development database would you like to use?

选择开发环境中使用的数据库
这是一个单选题,有3个选项,使用上下键切换选项。
H2调试起来简单,但为了和生产环境保持一致性,这里选择MySQL

img_3dd2e615cc1b89e806d61ad45237021d.png

单击回车继续。

1.11 Do you want to use the Spring cache abstraction?

是否需要使用Spring Cache?
这是一个单选题,有5个选项,使用上下键切换选项。
根据实际场景需要,可以选择不同缓存组件;这里简单起见,选择No - Warning, when using an SQL database, this will disable the Hibernate 2nd level cache!

img_6701c5cd68f8cf5ca2b3bbc773de7e45.png

单击回车继续。

1.12 Would you like to use Maven or Gradle for building the backend?

选择使用Maven还是Gradle来构建微服务
这是一个单选题,有2个选项,使用上下键切换选项。
根据自己的开发环境需要,选择相应的构建工具,这里选择默认选项Maven

img_69d7c523e506d0824a28c7122f3e80c8.png

单击回车继续。

1.13 Which other technologies would you like to use?

选择需要用到的技术组件
这是一个多选题,有4个选项,使用上下键切换选项,使用空格键选中选项,使用a键全选,使用i键取消全选。
根据自己的技术架构规划,选择相应的技术组件,也可以都不选择。

img_88cdf7dd2cc2dca3ef0e2f05b5bf525e.png

单击回车继续。

1.14 Would you like to enable internationalization support?

是否需要国际化支持?
默认选择是Y,如果不需要,输入n;这里选择默认选项Y

img_82b0bcfbdd117467a7adaf06b771e198.png

单击回车继续。

1.15 Please choose the native language of the application

选择国际化支持中的母语
这是一个单选题,有37个选项,使用上下键切换选项。
注意:这个问题和上一个问题(1.14)的选择有关联性,上一个问题如果选择n,这个问题不会出现。

img_78e11173c979aab97b9242f43416baf0.png

单击回车继续。

1.16 Please choose additional languages to install

选择国际化支持中的其它语言
这是一个多选题,有37个选项,使用上下键切换选项,使用空格键选中选项,使用a键全选,使用i键取消全选。
根据自己的业务规划,选择相应的语言,也可以都不选择。

img_0c13d1b7ddcf92210e272fabb30a8852.png

单击回车继续。

1.17 Besides JUnit and Jest, which testing frameworks would you like to use?

选择单元测试工具
这是一个多选题,有2个选项,使用上下键切换选项,使用空格键选中选项,使用a键全选,使用i键取消全选。
根据自己的技术架构规划,选择相应的技术组件,也可以都不选择。

img_1222391e03405d78b5d3093444c28ede.png

单击回车继续。

1.18 Would you like to install other generators from the JHipster Marketplace?

是否需要从JHipster市场中安装其它的开发工具?
默认选择是N,如果需要启用,输入y;这里选择默认选项N

img_bbfbfce91cb643fd4869a9e63b9d865e.png

单击回车继续。

问答结束,开始生成工程代码

这个过程,根据电脑性能和网速的不同,通常需要1-3分钟。

img_1268f2904b0e319576bc2b7efae79fc8.png

至此,生成业务微服务工程代码成功完成。可以在appstack/microservice1目录下查看所有生成的文件。

2 生成业务微服务的实体代码

接下来,创建一个实体表role,并生成相关的后端代码。
在开始之前,通常需要先把数据库设计完成,一般情况下不需要手工添加id字段,JHipster默认会生成一个自增的int类型的id主键。
进入microservice1目录,输入命令后回车:

$ cd microservice1/
$ jhipster entity role

命令行输出实体已创建

img_0d99758302c5c5603f4a1f1ff146e5fe.png

现在开始创建字段

2.1 Do you want to add a field to your entity?

是否需要添加一个字段到实体?
默认选择是Y,如果不需要添加,输入n;这里选择默认选项Y

img_fe788b9f82dac10c87e3de401cb6dd37.png

单击回车继续。

2.2 What is the name of your field?

输入字段名
这里输入第一个字段名roleName,字段名要符合之前所选择的数据库的命名规范。
注意:这个问题和上一个问题(2.1)的选择有关联性,上一个问题如果选择n,这个问题不会出现。

img_3788acf7cb76194df46b451b2f80a505.png

单击回车继续。

2.3 What is the type of your field?

选择字段类型
这是一个单选题,有12个选项,使用上下键切换选项。
根据你的数据库设计,选择相应类型,这里选择String类型。

img_ecefa88f003b242a855b3248fca46cd4.png

单击回车继续。

2.4 Do you want to add validation rules to your field?

是否需要为这个字段添加规则?
默认选择是N,如果需要添加,输入y;这里选择默认选项N

img_7b50bd75ec32babe248979030554f364.png

单击回车继续。

2.5 Do you want to add a field to your entity?

是否需要继续添加字段?
成功添加完一个字段后,重新回到了第一个问题(2.1)。如果选择Y,会重复2.1 ~ 2.4的过程;如果选择n,则进入新的问题;这里输入n

img_94e76ea4e4813cf29a6901868903f79f.png

单击回车继续。

2.6 Do you want to add a relationship to another entity?

是否需要添加一个与别的实体的关联关系?
默认选择是Y,如果不需要添加,输入n;因为目前还没有生成别的实体,这里输入n

img_24dca4c90e644a4a6172e37077966563.png

单击回车继续。

2.7 Do you want to use separate service class for your business logic?

是否需要使用独立的service层来封装业务逻辑?
这是一个单选题,有3个选项,使用上下键切换选项。
三个选项的意思分别是不用service层使用service类使用service接口和实现类;这里选择Yes, generate a separate service class

img_5049997dd2983ab0b76aef2f3f7cd1d6.png

单击回车继续。

2.8 Do you want to use a Data Transfer Object (DTO)?

是否需要使用DTO?
这是一个单选题,有2个选项,使用上下键切换选项。
如果选择No, use the entity directly,可能会带来一些前后端耦合和传输效率的问题;所以这里选择[BETA] Yes, generate a DTO with MapStruct,虽然还是BETA版本,但实际项目中使用没出现什么问题。

img_a96b28c8fb699346bb44fc7d5be9c7c1.png

单击回车继续。

2.9 Do you want to add filtering?

是否需要添加筛选功能?
这是一个单选题,有2个选项,使用上下键切换选项。
如果选择添加筛选功能,代码中会添加JPA动态查询的逻辑,但实际代码还需要手动修改,也许将来新版本会不断完善这个功能;这里为了简单起见,选择Not needed

img_1395236fe7ddef7019a2ad548658e2fe.png

单击回车继续。

2.10 Do you want pagination on your entity?

是否需要分页功能?
这是一个单选题,有3个选项,使用上下键切换选项。
第2个选项适合Web UI,第3个选项适合Mobile UI;这里选择Yes, with pagination links

img_cd3314c52499639d84420478cd64742b.png

单击回车继续。

问答结束,开始生成实体代码

这个过程中会提示与已有文件有冲突,需要选择处理方式,提示的输入选项是Ynaxdh,说明如下:

Y: yes (Default)
n: no
a: yes to this question and all others (or always yes).
x: abort (exit)
d: show the differences between the old and the new file
h: help, list all options

这里选择a

img_e40d4ed561929f41a9837a0e1c03fcf3.png

单击回车。业务微服务的实体代码生成只包括后端代码,过程会比较快,通常1-2分钟就能完成。

img_f838c4af400bab953e2d1e853f4d0ce5.png

至此,生成实体代码成功完成。可以执行maven测试命令来验证整个工程代码(如果生成工程代码时选择的构建工具是Maven)

$ mvn test

如果一切正常,命令行会输出成功信息:

img_def20d68b6c471dcc201cea5110034cb.png

3 业务微服务的数据库配置

3.1 启动一个数据库容器

在命令行,任意目录下,启动一个mysql容器;如果本地没有mysql:5的镜像,容器启动时会自动去docker store下载镜像。

$ docker container run --name microservice1-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d -p 32700:3306 mysql:5

3.2 在数据库中创建schema

通过客户端连接上刚启动的数据库容器,添加一个名为microservice1的schema。微服务启动时会自动在这个schema里面创建数据表。

3.3 修改微服务的数据库配置

spring.datasource.url中的端口号32700,与步骤2.1中-p参数指定的值保持一致。
spring.datasource.url中的schema名称microservice1,与步骤2.2中添加的schema名称保持一致。
spring.datasource.password的值my-secret-pw,与步骤2.1中MYSQL_ROOT_PASSWORD参数指定的值保持一致。

$ cd microservice1/
$ vi src/main/resources/config/application-dev.yml
# 修改数据库连接相关配置
spring:
    datasource:
        url: jdbc:mysql://localhost:32700/microservice1?useUnicode=true&characterEncoding=utf8&useSSL=false
        username: root
        password: my-secret-pw

4 业务微服务的构建和启动

4.1 构建

进入microservice1目录,输入命令后回车:

$ cd microservice1/
$ mvn -Pdev package

如果一切正常,命令行会输出构建成功信息:

img_01c90e735c597d00e69e819c4121e681.png

4.2 启动

进入microservice1目录,输入命令后回车:

$ nohup ./target/microservice-1-0.0.1-SNAPSHOT.war &

通过tail命令,查看启动日志:

$ tail -f nohup.out

如果一切正常,日志会输出启动成功信息:

img_ea06f7b3fe6101f2fa96efb63ecf06e3.png

4.3 注册到JHipster Registry

启动完成后,可以通过浏览器访问http://192.168.220.120:8761,登录名和密码默认都是admin

img_19ee9cdd25ab21b2fc81919fe1cc9a11.png

可以看到在Instances Registered区域,microservice1已经注册。
注意:选择生成Microservice application类型的微服务时,不会生成前端资源,这也符合微服务架构的设计思想;如果需要生成微服务中实体(role)的前端资源,会在网关微服务中生成。

系列文章

JHipster生成微服务架构的应用栈(一)- 准备工作
JHipster生成微服务架构的应用栈(二)- 认证微服务示例
JHipster生成微服务架构的应用栈(三)- 业务微服务示例
JHipster生成微服务架构的应用栈(四)- 网关微服务示例
JHipster生成微服务架构的应用栈(五)- 容器编排示例




你现在的气质里,藏着你走过的路,读过的书,爱过的人。


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
6天前
|
弹性计算 API 持续交付
后端服务架构的微服务化转型
本文旨在探讨后端服务从单体架构向微服务架构转型的过程,分析微服务架构的优势和面临的挑战。文章首先介绍单体架构的局限性,然后详细阐述微服务架构的核心概念及其在现代软件开发中的应用。通过对比两种架构,指出微服务化转型的必要性和实施策略。最后,讨论了微服务架构实施过程中可能遇到的问题及解决方案。
|
23天前
|
Cloud Native 安全 数据安全/隐私保护
云原生架构下的微服务治理与挑战####
随着云计算技术的飞速发展,云原生架构以其高效、灵活、可扩展的特性成为现代企业IT架构的首选。本文聚焦于云原生环境下的微服务治理问题,探讨其在促进业务敏捷性的同时所面临的挑战及应对策略。通过分析微服务拆分、服务间通信、故障隔离与恢复等关键环节,本文旨在为读者提供一个关于如何在云原生环境中有效实施微服务治理的全面视角,助力企业在数字化转型的道路上稳健前行。 ####
|
5天前
|
Java 开发者 微服务
从单体到微服务:如何借助 Spring Cloud 实现架构转型
**Spring Cloud** 是一套基于 Spring 框架的**微服务架构解决方案**,它提供了一系列的工具和组件,帮助开发者快速构建分布式系统,尤其是微服务架构。
101 68
从单体到微服务:如何借助 Spring Cloud 实现架构转型
|
21天前
|
消息中间件 监控 安全
后端架构演进:从单体到微服务####
在数字化转型的浪潮中,企业应用的后端架构经历了从传统单体架构到现代微服务架构的深刻变革。本文探讨了这一演进过程的背景、驱动力、关键技术及面临的挑战,揭示了如何通过微服务化实现系统的高可用性、扩展性和敏捷开发,同时指出了转型过程中需克服的服务拆分、数据管理、通信机制等难题,为读者提供了一个全面理解后端架构演变路径的视角。 ####
44 8
|
22天前
|
Cloud Native 安全 API
云原生架构下的微服务治理策略与实践####
—透过云原生的棱镜,探索微服务架构下的挑战与应对之道 本文旨在探讨云原生环境下,微服务架构所面临的关键挑战及有效的治理策略。随着云计算技术的深入发展,越来越多的企业选择采用云原生架构来构建和部署其应用程序,以期获得更高的灵活性、可扩展性和效率。然而,微服务架构的复杂性也带来了服务发现、负载均衡、故障恢复等一系列治理难题。本文将深入分析这些问题,并提出一套基于云原生技术栈的微服务治理框架,包括服务网格的应用、API网关的集成、以及动态配置管理等关键方面,旨在为企业实现高效、稳定的微服务架构提供参考路径。 ####
43 5
|
28天前
|
设计模式 Java API
微服务架构演变与架构设计深度解析
【11月更文挑战第14天】在当今的IT行业中,微服务架构已经成为构建大型、复杂系统的重要范式。本文将从微服务架构的背景、业务场景、功能点、底层原理、实战、设计模式等多个方面进行深度解析,并结合京东电商的案例,探讨微服务架构在实际应用中的实施与效果。
93 6
|
28天前
|
设计模式 Java API
微服务架构演变与架构设计深度解析
【11月更文挑战第14天】在当今的IT行业中,微服务架构已经成为构建大型、复杂系统的重要范式。本文将从微服务架构的背景、业务场景、功能点、底层原理、实战、设计模式等多个方面进行深度解析,并结合京东电商的案例,探讨微服务架构在实际应用中的实施与效果。
37 1
|
3月前
|
安全 应用服务中间件 API
微服务分布式系统架构之zookeeper与dubbo-2
微服务分布式系统架构之zookeeper与dubbo-2
|
3月前
|
负载均衡 Java 应用服务中间件
微服务分布式系统架构之zookeeper与dubbor-1
微服务分布式系统架构之zookeeper与dubbor-1
|
4月前
|
Kubernetes Cloud Native Docker
云原生之旅:从容器到微服务的架构演变
【8月更文挑战第29天】在数字化时代的浪潮下,云原生技术以其灵活性、可扩展性和弹性管理成为企业数字化转型的关键。本文将通过浅显易懂的语言和生动的比喻,带领读者了解云原生的基本概念,探索容器化技术的奥秘,并深入微服务架构的世界。我们将一起见证代码如何转化为现实中的服务,实现快速迭代和高效部署。无论你是初学者还是有经验的开发者,这篇文章都会为你打开一扇通往云原生世界的大门。