Mil*_*lad 5 spring-data spring-data-jpa spring-boot microservices
我正在尝试使用微服务架构制作一个简单的Spring Boot Web 应用程序。
我有两个微服务,其实体定义如下:
Microservice 1 :
@Entity
public class Article {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String title;
private String Content;
}
Run Code Online (Sandbox Code Playgroud)
和
Microservice 2 :
@Entity
public class Tag {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String title;
}
Run Code Online (Sandbox Code Playgroud)
现在我想在我的Gateway中的这两个实体之间建立多对多关系。
我曾尝试使用 feign 客户端,如下所示:
Gateway :
@FeignClient(value = "article-service")
public interface ArticleClient {
@RequestMapping(value = "/articles/", method = RequestMethod.GET)
Set<Article> getArticleById(@RequestParam("id") Long id);
}
@FeignClient(value = "tag-service")
public interface TagClient {
@RequestMapping(value = "/tags/", method = RequestMethod.GET)
Tag getTagById(@RequestParam("id") Long id);
}
Run Code Online (Sandbox Code Playgroud)
并在我的网关中定义了文章和标签实体,如下所示:
Gateway :
@JsonIgnoreProperties(ignoreUnknown = true)
public class Entry {
private Long id;
private String title;
private String Content;
@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name = "article_tag",
joinColumns = @JoinColumn(name = "article_id", referencedColumnName = "id"),
inverseJoinColumns = @JoinColumn(name = "tag_id",
referencedColumnName = "id"))
private Set<Tag> tags;
}
@JsonIgnoreProperties(ignoreUnknown = true)
public class Tag {
private Long id;
private String title;
@ManyToMany(mappedBy = "tags")
private Set<Article> articles;
}
Run Code Online (Sandbox Code Playgroud)
我的数据库(Postgres )中有一个名为article_tag的表。
现在我如何在网关中定义我的存储库?如何编写 getArticlesByTagId() 或 getTagsByArticleId() 函数?我尽了一切努力来维持这种关系,但我认为他们不会和睦相处:)
这根本不可能是你想要的,你有两个不同的应用程序,每个实体在其上下文中都有自己的生命。想象一下,如果某个服务宕机了,你会怎么办?
如果一个微服务与另一个微服务紧密相连,您应该修改您的架构。
要解决此类问题,请在每个实体中添加一个标识符来标识哪个标签属于条目,反之亦然,您可以使用这些标识符请求数据。
| 归档时间: |
|
| 查看次数: |
5855 次 |
| 最近记录: |