如何创建跨服务域模型映射?

时间:2019-10-02 06:42:37

标签: java spring spring-boot jpa microservices

我在Spring Boot微服务架构中有两个微服务。假设...

  • 热点服务
  • 附件服务

这两个服务都包含一个域模型,当然最后要包含在单独的JAR中。

热点域模型(热点服务)

@Entity
public class HotSpot {

    @Id
    private Long id;
}

附件域模型(附件服务)

@Entity
public class Attachment {

    @Id
    private Long id;
}

如果创建新的热点,应该可以添加其他附件,例如描述图像。因此,热点实体及其附件之间应该存在某种关联/映射。在整体应用程序中,这可以通过使用JPA注释@OneToOne或类似的注释来实现。

如何在微服务架构中实现这一目标?两个类都在单独的JAR /项目中!我考虑过独立于JPA仅将标识符存储为Long。 还有“更好” /其他想法吗?

2 个答案:

答案 0 :(得分:2)

首先,我想问一下您如何划分微服务?分离相互依赖的资源没有任何意义。在您的示例中,我不确定没有Hotspot的附件是否可以存在。如果不可能的话,将这两个实体分别放在两个单独的微服务中绝对没有任何意义。

假设您的资源应分为两个微服务,则每个资源都需要一个URI。如果资源A与资源B相关,则可以将B的URI存储在A中,并且如果您的微服务是RESTful的,则提供A到B具有正确关系的链接。没有像OneToOne JPA关系这样的自动系统。

答案 1 :(得分:0)

我们有一个用于标记的半通用服务(例如您示例中的附件服务)。您可以使用类似于我们使用的结构,如下所示:

// Contains types of "things" that can accept attachments
// Probably unnecessary if you aren't multi-tenant
public class EntityType
{
   public int Id;
   public Guid TenantId;
   public string Name;
}

// Contains a list of Entities available to Attach to
public class Entity
{
   public int Id;
   public int EntityTypeId;
   public string EntityId; // The unique Identifier for this Instance of Entity
}

// Contains actual attachment values (URI's) assigned to an Entity instance
public class EntityAttachment
{
   public int Id;
   public int EntityId;
   public string Attachment;
}

尽管特定需求有所不同,但是类似的事情对于您而言可以构建通用的Attachments服务,使您可以附加到几乎所有内容,但仍保持数据的规范化和快速查询。

我们可以动态构建EntityTypeEntity数据集-如果有人想将标签添加到我们没有的类型或ID,我们会默默添加。