2017-09-13 45 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個型動物應用中,每個實體都有自己的生活其上下文。想象一下服務停止的情況,你會怎麼做?

如果微服務是密切相關的另外一個,你應該修改你的架構。

爲了解決這種問題,在每個實體添加一個標識符來識別標籤屬於條目,反之亦然,你可以使用這些標識要求您的資料。

相關問題