JHipster生成微服务架构的应用栈(四)- 网关微服务示例

简介: 本系列文章演示如何用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/gateway目录,输入命令后回车:

$ cd gateway/
$ jhipster

命令行输出JHipster启动信息

img_4e58ba7a967f8133b3e49b7bdd8fbccf.png

现在开始问答环节

1.1 Which type of application would you like to create?

选择生成的应用类型
这是一个单选题,有4个选项,使用上下键切换选项。
这里选择Microservice gateway,也就是网关微服务。

img_417d1cf3284f0714c0eb157fd8640524.png

单击回车继续。

1.2 What is the base name of your application?

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

img_e65ec2008429b556394a8fe96476e06c.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.

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

img_8996565904ed5d9457c622cad2e02f2e.png

单击回车继续。

1.4 What is your default Java package name?

输入应用的java包名
默认java包名是com.mycompany.myapp,也可以自己输入包名;这里使用默认包名。
注意:包名要符合Java标准规范的要求。

img_f0d7bc4001ea678364120916e1b9fd17.png

单击回车继续。

1.5 Which service discovery server do you want to use?

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

img_1792d23b04734cacef81c83353038100.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_e293003227a49905af2feca6c53f41a8.png

单击回车继续。

1.7 What is the folder path of your UAA application?

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

img_640ed72f474e9f403d9bd64e2ff76ad9.png

单击回车继续。

1.8 Which type of database would you like to use?

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

img_f1886f77b6b8b80b1f680169a65af226.png

单击回车继续。

1.9 Which production database would you like to use?

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

img_cbd5b1d57715d0c9fa507313d9c6fe71.png

单击回车继续。

1.10 Which development database would you like to use?

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

img_a0303fef6ca6698b177c88cff9ccc631.png

单击回车继续。

1.11 Do you want to use Hibernate 2nd level cache?

是否需要使用Hibernate 2级缓存?
默认选择是Y,如果不需要,输入n;这里选择默认选项Y

img_d836b0016740ca73542bef733ac09280.png

单击回车继续。

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

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

img_08bc1a23fdc743e0b515210555a80a62.png

单击回车继续。

1.13 Which other technologies would you like to use?

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

img_01236c0db49b4599823c96e826236ff3.png

单击回车继续。

1.14 Which Framework would you like to use for the client?

选择前端框架
这是一个单选题,有2个选项,使用上下键切换选项。
根据自己的技术架构规划,选择相应的前端框架,这里选择默认选项Angular 6

img_e97bdd4012383fb19ea4d39a4bb9d63f.png

单击回车继续。

1.15 Would you like to enable SASS support using the LibSass stylesheet preprocessor?

是否需要启用样式表预处理来支持SASS?
默认选择是N,如果需要启用,输入y;这里选择默认选项N

img_94cdcbd60bbec73d826f2267caea63be.png

单击回车继续。

1.16 Would you like to enable internationalization support?

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

img_717a7374854fdc58d0695ab6115fbccc.png

单击回车继续。

1.17 Please choose the native language of the application

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

img_9c90d1483b0d7a3fffc8e8ffa2c4c534.png

单击回车继续。

1.18 Please choose additional languages to install

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

img_fa58b9dff94e55cca6efe3fc5dde8644.png

单击回车继续。

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

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

img_bdf395d3b6fcb908a922f597d2a5a5bb.png

单击回车继续。

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

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

img_e6c715c87b461a8375c65c644e5d3b96.png

单击回车继续。

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

这个过程可能会有点长,根据电脑性能和网速的不同,通常需要3-5分钟。

img_ed1a8ed08891501d66ff1b4993c22792.png

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

2 生成实体代码

接下来,是为microservice1中的实体表role生成前端资源。
在开始之前,确保microservice1已经为实体role生成过后端代码。
进入appstack/gateway目录,输入命令后回车:

$ cd gateway/
$ jhipster entity role

命令行输出实体已创建

img_1581170d7689d83d946dec405efe3568.png

现在开始问答环节

2.1 Do you want to generate this entity from an existing microservice?

是否为一个现有的业务微服务的实体生成前端资源?
默认选择是Y,如果不需要添加,输入n;这里选择默认选项Y

img_5e803cd173a50e57d21a05a6bc54b086.png

单击回车继续。

2.2 Enter the path to the microservice root directory:

输入这个现有的业务微服务的路径
这是一个相对于gateway的相对路径,对于microservice1工程来说,这里要输入../microservice1

img_b1ad7f4c00a12debc94ad68df4e6f934.png

单击回车继续。

2.3 Do you want to update the entity? This will replace the existing files for this entity, all your custom code will be overwritten

是否要更新这个实体
这是一个单选题,有4个选项,使用上下键切换选项。
4个选项的意思分别是是的,重新生成这个实体是的,增加字段和关系是的,删除字段和关系不,退出。这里选择Yes, re generate the entity

img_3778c037d06a4c1fe73f93729976dd25.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_d23027dbb0f1568f2162f539c7115fdf.png

单击回车。这里主要是生成实体对应的前端资源,根据实体的复杂程度不同,耗时也不尽相同,我们这个示例只有1个字段,生成很快,通常1-2分钟就能完成。

img_bb36de154b1811ffc865d01a34b478ae.png

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

$ mvn test

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

img_f785c9d89781a40dd3648b0a9ed89858.png

3 生成前端资源

之前在生成工程代码时选择的前端组件是Angular,所以前端资源会按如下流程生成:
a, 生成工程代码或者实体代码的任务完成后,会自动触发执行yarn install
b, yarn install执行完成后,会自动触发执行webpack:build
c, webpack:build执行完成后,所有前端资源就已经生成了,默认是在gateway/target/www目录下。

调试前端页面

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

$ cd gateway/
$ yarn start

如果一切正常,会启动Webpack dev-server;

img_9f5143e7f13b3777a4edfad5064bcafa.png

可通过浏览器访问http://192.168.220.120:9000查看前端调试页面。此时所有前端资源的修改,都会同步更新到浏览器上。

img_bcb133159022d6be6412b2c9c80b5747.png

4 数据库配置

4.1 启动一个数据库容器

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

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

4.2 在数据库中创建schema

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

4.3 修改应用的数据库配置

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

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

5 构建和启动

5.1 构建

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

$ cd gateway/
$ mvn -Pdev package

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

img_7445f8e86a436f417a8143bf94dd6708.png

5.2 启动

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

$ nohup ./target/gateway-0.0.1-SNAPSHOT.war &

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

$ tail -f nohup.out

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

img_905d6cf65fdd0aa6b91e3fa8fb89eb8a.png

5.3 注册到JHipster Registry

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

img_eabcdfd14a97da47627805cbfd26b7ff.png

可以看到在Instances Registered区域,gateway已经注册。

6 访问网关微服务UI

6.1 访问首页

通过浏览器访问http://192.168.220.120:8080,进入网关微服务的首页:

img_9b398d63778f2ee74bc0f4b51d9b491c.png

点击右上角账号 - 登录, 默认用户名和密码都是admin

6.2 实体页面

登录之后可以看到页头上的菜单,数据菜单下就是所有实体的操作页面,这里能看到生成的实体role的子菜单:

img_0d8f51d289c8dcad724d25254d2d973e.png

点击role子菜单,进入role实体的操作页面,这里已经生成了基本的增删改查功能,如果需要更多功能,就要定制开发了:

img_dac2a9f06a0f0955ffa0c789f056cf6d.png

6.3 管理页面

这里包括了如下功能页面:

  • 网关
  • 用户管理
  • 资源监控
  • 服务状态
  • 配置
  • 审核
  • 日志
  • API

img_f6f8ea5e7e47c5db4845cdfc23106ce1.png

页面功能都很直观,点进去看一看就知道了。

6.4 语言页面

这里就是国际化支持的页面,生成工程代码时选择了哪些语言,这里就会提供哪些语言的子菜单:

img_2d9d247765385d0b8077acc2b408bcd1.png

系列文章

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




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


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
11月前
|
监控 Java API
Spring Boot 3.2 结合 Spring Cloud 微服务架构实操指南 现代分布式应用系统构建实战教程
Spring Boot 3.2 + Spring Cloud 2023.0 微服务架构实践摘要 本文基于Spring Boot 3.2.5和Spring Cloud 2023.0.1最新稳定版本,演示现代微服务架构的构建过程。主要内容包括: 技术栈选择:采用Spring Cloud Netflix Eureka 4.1.0作为服务注册中心,Resilience4j 2.1.0替代Hystrix实现熔断机制,配合OpenFeign和Gateway等组件。 核心实操步骤: 搭建Eureka注册中心服务 构建商品
1484 3
|
9月前
|
人工智能 JavaScript 前端开发
GenSX (不一样的AI应用框架)架构学习指南
GenSX 是一个基于 TypeScript 的函数式 AI 工作流框架,以“函数组合替代图编排”为核心理念。它通过纯函数组件、自动追踪与断点恢复等特性,让开发者用自然代码构建可追溯、易测试的 LLM 应用。支持多模型集成与插件化扩展,兼具灵活性与工程化优势。
740 6
|
10月前
|
人工智能 Cloud Native 中间件
划重点|云栖大会「AI 原生应用架构论坛」看点梳理
本场论坛将系统性阐述 AI 原生应用架构的新范式、演进趋势与技术突破,并分享来自真实生产环境下的一线实践经验与思考。
|
10月前
|
机器学习/深度学习 人工智能 vr&ar
H4H:面向AR/VR应用的NPU-CIM异构系统混合卷积-Transformer架构搜索——论文阅读
H4H是一种面向AR/VR应用的混合卷积-Transformer架构,基于NPU-CIM异构系统,通过神经架构搜索实现高效模型设计。该架构结合卷积神经网络(CNN)的局部特征提取与视觉Transformer(ViT)的全局信息处理能力,提升模型性能与效率。通过两阶段增量训练策略,缓解混合模型训练中的梯度冲突问题,并利用异构计算资源优化推理延迟与能耗。实验表明,H4H在相同准确率下显著降低延迟和功耗,为AR/VR设备上的边缘AI推理提供了高效解决方案。
1547 0
|
9月前
|
人工智能 Kubernetes Cloud Native
Higress(云原生AI网关) 架构学习指南
Higress 架构学习指南 🚀写在前面: 嘿,欢迎你来到 Higress 的学习之旅!
3448 0
|
9月前
|
机器学习/深度学习 自然语言处理 算法
48_动态架构模型:NAS在LLM中的应用
大型语言模型(LLM)在自然语言处理领域的突破性进展,很大程度上归功于其庞大的参数量和复杂的网络架构。然而,随着模型规模的不断增长,计算资源消耗、推理延迟和部署成本等问题日益凸显。如何在保持模型性能的同时,优化模型架构以提高效率,成为2025年大模型研究的核心方向之一。神经架构搜索(Neural Architecture Search, NAS)作为一种自动化的网络设计方法,正在为这一挑战提供创新性解决方案。本文将深入探讨NAS技术如何应用于LLM的架构优化,特别是在层数与维度调整方面的最新进展,并通过代码实现展示简单的NAS实验。
433 0
|
11月前
|
Web App开发 Linux 虚拟化
Omnissa Horizon 8 2506 (8.16) - 虚拟桌面基础架构 (VDI) 和应用软件
Omnissa Horizon 8 2506 (8.16) - 虚拟桌面基础架构 (VDI) 和应用软件
528 0
Omnissa Horizon 8 2506 (8.16) - 虚拟桌面基础架构 (VDI) 和应用软件
|
11月前
|
机器学习/深度学习 数据采集 存储
技术赋能下的能源智慧管理:MyEMS 开源系统的架构创新与应用深化
在全球能源转型与“双碳”战略推动下,MyEMS作为基于Python的开源能源管理系统,凭借模块化架构与AI技术,助力重点用能单位实现数字化、智能化能源管理。系统支持多源数据采集、智能分析、设备数字孪生与自适应优化控制,全面满足国家级能耗监测要求,并已在制造、数据中心、公共建筑等领域成功应用,助力节能降碳,推动绿色可持续发展。
355 0
|
设计模式 Java API
微服务架构演变与架构设计深度解析
【11月更文挑战第14天】在当今的IT行业中,微服务架构已经成为构建大型、复杂系统的重要范式。本文将从微服务架构的背景、业务场景、功能点、底层原理、实战、设计模式等多个方面进行深度解析,并结合京东电商的案例,探讨微服务架构在实际应用中的实施与效果。
932 6
|
设计模式 Java API
微服务架构演变与架构设计深度解析
【11月更文挑战第14天】在当今的IT行业中,微服务架构已经成为构建大型、复杂系统的重要范式。本文将从微服务架构的背景、业务场景、功能点、底层原理、实战、设计模式等多个方面进行深度解析,并结合京东电商的案例,探讨微服务架构在实际应用中的实施与效果。
491 1