了解如何创建带有春靴,春天云网关,春云Config,Spring WebFlux,Java和Jhipster的反应性微源架构。

即使只有几年前突出,Java也一直处于MicroService架构的最前沿。春云,春天数据和春季安全,Java是知名的高质量框架。
春天webflux 是Spring Boot 2.0引入的新Web框架。虽然以前版本的Spring Boot仅用Spring MVC作为一个选项运送,但WebFlux为开发人员提供了做反应编程的机会,这意味着您可以使用熟悉的语法编写代码。因此,您的应用程序将更好地扩展并使用更少的资源。

为什么反应性微服务?
反应编程ISN’每个应用程序。拇指的一般规则是赢了’如果你有的话,帮助你<500要求/秒。机会是Spring MVC将执行以及Spring WebFlux到那个点。当您的流量起飞时,或者如果您需要在500个请求/秒更快地处理内容时,您应该看看Spring WebFlux。
春天webflux’S API对Spring MVC具有类似的语法。例如,这里’S Spring MVC代码,用于创建新的 点
entity.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
/ ** * {@code POST / points}:创建一个新点。 * * @param指向要创建的点。 * @return与status {@code 201(创建)}以及身体新点,或使用station {@code 400(错误请求)}如果该点已经是ID,则为{@code 400(错误请求)。 * @Throws UrisyntaxException如果位置URI语法不正确。 */ @postmappping.(“/分”) 民众 响应<Points> CreatePoints.(@有效的 @RequestBody. 点 点) 抛出 UrisyntaxException. { 日志.调试(“休息请求保存点:{}”, 点); 如果 (点.getid.() != 无效的) { 扔 新的 BadrequestalertException.(“一个新的观点就不能拥有一个身份证”, 实体名称, “Idexists”); } 点 结果 = 点Repository..保存(点); 点earchRepository..保存(结果); 返回 响应 .创造了(新的 Uri.(“/ api / points /” + 结果.getid.())) .标题(标题.createentitycreationalert.(应用名称, 真的, 实体名称, 结果.getid.().到 String.())) .身体(结果); } |
使用Spring WebFlux实现时相同的功能返回a 单核细胞增多症
并使用更功能,流式的流式风格来避免阻止。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
/ ** * {@code POST / points}:创建一个新点。 * * @param指向要创建的点。 * @return与status {@code 201(创建)}以及身体新点,或使用station {@code 400(错误请求)}如果该点已经是ID,则为{@code 400(错误请求)。 * @Throws UrisyntaxException如果位置URI语法不正确。 */ @postmappping.(“/分”) 民众 单核细胞增多症<响应<Points>> CreatePoints.(@有效的 @RequestBody. 点 点) 抛出 UrisyntaxException. { 日志.调试(“休息请求保存点:{}”, 点); 如果 (点.getid.() != 无效的) { 扔 新的 BadrequestalertException.(“一个新的观点就不能拥有一个身份证”, 实体名称, “Idexists”); } 返回 点Repository. .保存(点) .平底图(点earchRepository.::保存) .地图( 结果 -> { 尝试 { 返回 响应 .创造了(新的 Uri.(“/ api / points /” + 结果.getid.())) .标题(标题.createentitycreationalert.(应用名称, 真的, 实体名称, 结果.getid.().到 String.())) .身体(结果); } 抓住 (UrisyntaxException. e) { 扔 新的 跑步timeexception.(e); } } ); } |
在本指南中,我’LL向您展示如何创建带有春靴,春天云网关,春天云配置,Spring WebFlux,Java和Jhipster的反应性微服务架构。

先决条件
您可以在Github上找到此示例的已完成的源代码,在 Oktadeveloper / java-microServices - 示例存储库.
1 2 |
Git. 克隆 https://github.com/oktadeveloper/java-microservices-examples.git 光盘 java.-微服务-例子/反应-Jhipster. |
建立反应性微源架构
Jhipster. 是一个以应用程序发生器为基础的开源项目,基于 耶曼。它’s also the 最受欢迎的Yeoman Generator。 Jhipster最初允许您生成AngularJS和Spring Apps。在过去的五年里,它’S成为一个具有可扩展性的平台,增长了一个繁荣的社区,并节省了开发人员的痛苦和挫折。
你看,Jhipster为你整合了一切。你想用春天启动使用角吗?它’得到了。反应?是的。春天云的微服务?查看!
在本教程中,我’LL向您展示如何生成使用OAuth 2.0,API网关和两个微服务(博客和商店)的微服务体系结构。网关将使用PostgreSQL与R2DBC,博客将使用Neo4j,商店将使用MongoDB。所有持久性选项都由Spring数据提供支持。
首先使用NPM安装Jhihster:
1 |
NPM. i -g 发电机-Jhipster.@bet |
安装Jhipster后,您可以运行以下命令以回答整个问题并创建应用程序。
1 |
Jhipster. |
但是,那里有’更容易的方式。 Jhipster有自己的域名语言!
使用JDL定义您的反应性Java架构
Jhipster. Domain Language (JDL.)提供一种定义应用程序的方法,所以你不’不得不担心胖胖的答案你的答案 Jhipster.
command’s questions.
在计算机上创建一个新目录并在终端中导航到其中。
1 2 |
拿 反应-堆 # MKDIR. 反应-堆 && 光盘 反应-堆 Git. 在里面 # 初始化 Git., 所以 应用 aren.'t 创造了 和 他们的 自己的 .Git. |
复制下面的JDL并将其放入其中 反应-ms.jdl
file.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
应用 { 配置 { Basename. 门户网关 反应 真的 包裹名字 com.okta..开发人员.门户网关 应用类型 门户网关 身份验证型 oauth2 buildtool. 译 客户框架 vue. proddatabaseType. 邮政greSQL. servicediscoverytype. 尤里卡 testframeworks. [Protractor..] } 实体 博客, 邮政, 标签, 产品 } 应用 { 配置 { Basename. 博客 反应 真的 包裹名字 com.okta..开发人员.博客 应用类型 microService. 身份验证型 oauth2 buildtool. 译 databaseType. neo4j devdatabaseType. neo4j proddatabaseType. neo4j enerationHernateCache. 错误的 服务器端口 8081 servicediscoverytype. 尤里卡 } 实体 博客, 邮政, 标签 } 应用 { 配置 { Basename. 店铺 反应 真的 包裹名字 com.okta..开发人员.店铺 应用类型 microService. 身份验证型 oauth2 buildtool. 译 databaseType. MongoDB. devdatabaseType. MongoDB. proddatabaseType. MongoDB. enerationHernateCache. 错误的 服务器端口 8082 servicediscoverytype. 尤里卡 } 实体 产品 } 实体 博客 { 姓名 细绳 必需的 Miclength.(3) 处理 细绳 必需的 Miclength.(2) } 实体 邮政 { 标题 细绳 必需的 内容 TextBlob. 必需的 日期 立即的 必需的 } 实体 标签 { 姓名 细绳 必需的 Miclength.(2) } 实体 产品 { 标题 细绳 必需的 价格 大二世 必需的 闵(0) 图像 图像Blob. } 关系 许多人 { 博客{用户(登录)} 到 用户 邮政{博客(姓名)} 到 博客 } 关系 多么多丝组织 { 邮政{标签(姓名)} 到 标签{邮政} } 窥探 邮政, 标签 和 无限的-滚动 窥探 产品 和 分页 microService. 产品 和 店铺 microService. 博客, 邮政, 标签 和 博客 部署 { 部署型 Docker..-撰写 AppsFolders. [门户网关, 博客, 店铺] dockErrepositoryName. “马拉伊” } |
- 第一个应用程序是API网关。
- 因为网关是反应性的’ll使用春天云网关。
- Gateway和MicroService应用程序必须使用相同的身份验证类型。
- 使用gradle,因为很多y’all love it.
- Vue支持是Jhipster 7的新功能,让’s use it!
- 确保并指定
microService.
作为博客和商店应用程序的应用程序类型。 - JDL.允许您创建Docker Compose和Kubernetes部署!
看 应用程序配置选项 要查看上述配置选项的可能值。
导入此体系结构定义并生成 门户网关
, 博客
, 和 店铺
apps.
1 |
Jhipster. JDL.. 反应-多发性硬化症.JDL.. |
作为此过程的一部分,为您生成了多个Docker组成文件。这些允许您运行数据库 Jhipster. Registry (用于服务发现), Keycloak. (适用于身份),所有与Docker。
运行您的反应性Java MicroService
Jhipster完成生成您的应用后,您可以使用Gradle运行它们。假设你’在你跑的同一个顶级目录中 Jhipster. jdl
从,您可以运行以下命令以启动每个微服务的所有后端服务。
Jhipster. has a 哦,我的zsh!插入 我强烈推荐。它为启动Docker容器提供别名,并且是一个实时节省的。一世’VE包括以下命令作为下面的评论。
1 2 3 4 5 |
光盘 门户网关 。/Gradlew. |
这 Jhipster. Registry 是一个处理服务发现的netflix eureka服务器。当网关和微服务启动时,它们会注册eureka。这允许使用逻辑名称,而不是IP地址或主机名之间的服务之间的通信。 Jhihster Registry还包含一个Spring Cloud Config Server,可以在应用程序之间分发配置。您可以了解有关Spring Cloud Config的更多信息 Spring Cloud Confif for Shared MicroService配置.
打开一个新的终端窗口,启动博客应用程序’s neo4j数据库,然后是应用程序本身。
1 2 3 |
然后,打开另一个终端窗口,启动商店应用程序’S MongoDB数据库和微服务。
1 2 3 |
光盘 ../店铺 Docker.-compose -f src / mAIN./ docker / mongodb..yml. 向上 -d #jhmongoup. ./毕业 |
要使keycloak工作,您需要将以下行添加到主机文件(/etc/hosts
on Mac/Linux, c:\Windows\System32\Drivers\etc\hosts
on Windows).
1 |
127.0.0.1 Keycloak. |
这是因为您将使用计算机上的浏览器访问您的应用程序(其名为localhost,或 127.0.0.1
)但是在Docker中,它将在自己的容器中运行,该容器被命名 Keycloak.
.
测试您的反应性Java MicroService


打开 http://localhost:8080
在你最喜欢的浏览器中。你应该能够登录 admin/admin
as credentials.
确保您可以添加新博客,编辑现有帖子,并添加新产品。

为了证明一切以自动的方式工作,可以运行 NPM运行E2E.
在网关项目中’S目录。这将运行多个端到端测试 Protractor..jhipster有支持 柏, 但它 没有’t work with Okta yet.
准备您的反应Java堆栈以进行生产
KeyCloak是一个卓越的开源标识提供商。它对OAuth 2.0和OpenID Connect(OIDC)提供了良好的支持,并轻松在Docker容器中运行。我非常欣赏keycloak’易用性。我也很欣赏春天的安全’S OAuth和OIDC支持。
Spring Security使您只需要覆盖三个属性以从keycloak切换到OKTA!
在生产中,您可能不希望管理自己的身份提供程序实例。那’okta进来的地方。我们’重新开发商友好的SAAS公司,提供OAUTH和OIDC支持作为服务。您可以创建开发人员帐户并免费使用它。我们的 okta. cli. makes it super easy.
使用上述网站安装OKTA CLI并在此处回来’re done. If you don’T有一个OKTA开发人员帐户,运行 okta. register
.
您还可以使用您的浏览器和OKTA’S开发人员控制台注册应用程序。看 Jhipster.’S安全文件 对于那些指示。
然后,来自网关项目’s directory, run okta. apps create jhipster
。接受默认重定向URI。

这个过程做了几件事:
- 使用Jhipster注册OKTA的OIDC应用程序’s配置的重定向URI。
- 创造
ROLE_ADMIN
andROLE_USER
组并将您的用户添加到两者。 - 创造一个
groups
声明并将其添加到ID令牌中。 - 创造一个
.okta.env
文件带有值的文件’LL需要与OKTA交谈。
更新 the JHipster Registry to Distribute OIDC Configuration
我之前提到的Spring Cloud Config允许您分发Spring’S应用程序之间的配置。在本节中,您’ll配置Jhipster.’S Spring Security Settings在所有服务中使用OKTA。
添加以下yaml到 门户网关/src/main/docker/central-server-config/localhost-config/application.yml
。您可以找到每个属性的值 .okta.env
file.
1 2 3 4 5 6 7 8 9 10 11 |
春天: 安全: oauth2: 客户: 提供者: oidc.: 发行人-Uri.: https.://<your-okta-domain>/oauth2/default 登记: oidc.: 客户-ID: <客户-ID> 客户-秘密: <客户-秘密> |
保存更改。这些值将分发给Jhipster注册表,网关,博客和存储应用程序。通过运行以下命令重新启动Jhipster注册表:
1 2 |
Docker.-compose -f src / mAIN./Docker../Jhipster.-注册表.yml. 向上 -d #jhregistryup. |
采用 Ctrl.+C to kill all your 。/Gradlew.
进程再次启动。
现在,打开一个新的隐姓埋名浏览器窗口,转到 http://localhost:8080
,并登录。高兴地使用OKTA进行身份验证工作!
如果你’感觉幸运,您可以将OKTA凭据设置为环境变量并运行端到端测试(来自 门户网关
directory).
1 2 3 |
出口 e2e_username.=<你的-用户名> 出口 E2E_PASSWORD.=<你的-密码> NPM. 跑步 e2e |
您的Jhipster注册表现在配置为使用OKTA进行身份验证。你’LL需要在OKTA应用程序中添加重定向URI http://localhost:8761
。进行以下变化后,您应该能够登录它。
为MicroService应用程序创建Docker图像
您用于创建此反应堆栈的JDL包含Docker配置,因此您可以使用Docker编写运行所有内容。
停止所有应用程序 Ctrl.+C。停止所有码头实例。
1 |
Docker.. 停止 $(Docker.. PS. -a -q) |
要使用Docker编写运行Vactive堆栈,您需要为每个应用程序创建Docker映像。在三个不同的应用程序目录中,运行以下Gradle命令:
1 |
./毕业 -PPROD. 靴子 JibdockerBuild. |
使用Docker Compose运行MicroServices堆栈
一旦您的码头容器完成建筑,您’LL希望将OKTA设置添加到Jhipster注册表中的Spring Cloud Config。
带春天云配置的交换机身份提供者
打开 Docker..-compose/docker-compose.yml
在你最喜欢的IDE中(我喜欢 intellij想法)然后删除底部的键锁图像。如果你愿意,你可以留下它,但它赢了’在这个例子中使用。
更新 Docker..-compose/central-server-config/application.yml
包含要与所有微操作系统共享的OIDC设置。
1 2 3 4 5 6 7 8 9 10 11 |
春天: 安全: oauth2: 客户: 提供者: oidc.: 发行人-Uri.: https.://<your-okta-domain>/oauth2/default 登记: oidc.: 客户-ID: <客户-ID> 客户-秘密: <客户-秘密> |
证明您的反应Java堆栈工作
在里面 Docker..-compose
目录,运行以下命令以启动所有容器。
1 |
Docker..-撰写 向上 |
你应该能够打开 http://localhost:8080
,登录,访问所有微服务。漂亮的光滑,呃?!
Kotlin MicroServices怎么样?
jhihster支持基于Kotlin的微服务,得益于它 kotlin.蓝图.
您可以使用NPM安装它:
1 |
NPM. 安装 -g 发电机-Jhipster.-kotlin. |
然后,使用 khipster jdl reactive-ms
创建与kotlin以上所做的相同堆栈。
如何部署到云端?
Jhihster创建了一个可以部署到许多云提供商的云本机微服务架构。那里’对AWS,Microsoft Azure,Heroku和Google云平台的特定支持。
但是,如果你’重新做微源,你’如果您在本教程中,我可能想要利用Docker。当您的应用程序被集装箱时,可以使用Kubernetes进行策划。
Jhipster. has a Kubernetes. 您可以使用的子生成器将其部署到云端。