2017-09-13 35 views
0

我试图让使用微服务架构简单春季启动的Web应用程序。如何在弹簧启动时使不同微服务中的两个实体之间发生关系?

我有两个微服务与实体如下定义:

Microservice 1 : 

@Entity 
public class Article { 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private Long id; 

    private String title; 

    private String Content; 

} 

Microservice 2 : 

@Entity 
public class Tag { 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private Long id; 

    private String title; 
} 

现在我想有很多要在这两个实体之间的许多关系在我网关

我曾试图用如下假死客户端:

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); 

} 

并确定文章标签实体在我网关这样的:

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; 
} 

我有一个表命名article_tag在我的数据库(的Postgres)。

现在,我怎么定义的网关我的仓库? 如何编写getArticlesByTagId()或getTagsByArticleId()函数? 我做任何我所能,使这个关系的工作,但我认为他们不会互相:)相处

+0

据我所知,你没有定义关系(因为你不会有任何)。取而代之的是,你的网关只包含'article_tag'的实体,你必须自己映射'article_id'和'tag_id'字段。如果您想检索特定标签的文章,请查找'article_id'并将它们传递给文章microservice(REST调用?)以检索完整的文章。 – g00glen00b

回答

0

它只是不可能的,你想要什么,你有2个型动物应用中,每个实体都有自己的生活其上下文。想象一下服务停止的情况,你会怎么做?

如果微服务是密切相关的另外一个,你应该修改你的架构。

为了解决这种问题,在每个实体添加一个标识符来识别标签属于条目,反之亦然,你可以使用这些标识要求您的资料。

相关问题