我正在运行最新的 JHipster 生成器
izio@1z10:~$ jhipster --version
Using JHipster version installed globally
5.3.4
并且我正在通过运行以下命令 JDL
jhipster import-jdl jhipster-jdl.jh
生成我的微服务和网关项目。
application {
config {
baseName Gateway
applicationType gateway
packageName com.app.gateway
databaseType postgresql
devDatabaseType postgresql
prodDatabaseType postgresql
serverPort 8080
languages [en,it,de,fr,es,pt-pt]
serviceDiscoveryType eureka
}
entities *
}
application {
config {
baseName authorMS
applicationType microservice
packageName com.app.ams
databaseType postgresql
devDatabaseType postgresql
prodDatabaseType postgresql
serverPort 8081
serviceDiscoveryType eureka
}
entities Author
}
application {
config {
baseName bookMS
applicationType microservice
packageName com.app.bms
databaseType postgresql
devDatabaseType postgresql
prodDatabaseType postgresql
serverPort 8082
serviceDiscoveryType eureka
}
entities Book
}
entity Author{
Name String required
}
entity Book{
Name String required
}
relationship ManyToMany{
Book{authors(name)} to Author
}
dto * with mapstruct
service * with serviceImpl
paginate * with pagination
microservice Author with authorMS
microservice Book with bookMS
由于jhipster import-jdl
命令没有错误,至少对于生成部分来说,一切似乎都可以。
这里的问题是,我需要一种通过实体的ID在不同的微服务之间链接实体的方法。
现在,该链接已错误地建立到另一个实体类(即使它位于其他微服务中)。显然,由于缺少实体类,这导致无法运行应用。
在这种情况下,唯一的逻辑解决方案是使用微服务的ID而不是实体类在不同的微服务之间链接实体。
有什么方法可以通过JDL做到这一点,而不是手动进行所需的更改吗?
答案 0 :(得分:2)
您正确地指定了来自不同微服务的实体之间的关系不起作用,并且我认为JDL解析器应该在这种情况下引发错误(请在github上随意报告问题),我没有尝试,但是我认为实体子生成器不允许这样做。因此,您可以在实体中定义简单的id字段,但不会建立关系,因为它不允许您轻松地在数据库中构建JOIN查询,因为每个实体都位于不同的数据库中,并且JHipster不会为此生成前端代码
我还建议您重新考虑如何在微服务之间划分业务领域。 建立这样的关系是微服务架构中的反模式,每个微服务都应在有限的上下文周围定义(有关详细信息,请参阅域驱动设计)。如果两个实体之间有很强的关系,则通常意味着它们应该属于同一微服务。可能会有例外,但是与一个微服务中的JOIN数据库查询相比,使用服务间调用来联接实体非常昂贵且脆弱,因此应避免使用它们。
答案 1 :(得分:0)
通过在子实体或父实体的组件中维护数组,可以创建仅在网关Web应用程序中存在的关系。每当查看此类组件时,无论是详细信息还是输入/更新表单,都可以使用该实体的http服务从微服务中提取数据并更新数组,或映射然后相应地匹配数据。 例如,图书实体可能包含有关作者的详细信息/字段,例如姓名或作者的ID。因此,当您更新图书时,可以使用“ ngOnInit”来填充“ authors”数组,并使用“ authorService”,然后在图书中输入“Äuthor's Name”字段时,从下拉列表中选择名称,使用“ book-update-component”中预先填充的“ authors”数组。