我在Spring Boot微服务架构中有两个微服务。假设...
这两个服务都包含一个域模型,当然最后要包含在单独的JAR中。
热点域模型(热点服务)
@Entity
public class HotSpot {
@Id
private Long id;
}
附件域模型(附件服务)
@Entity
public class Attachment {
@Id
private Long id;
}
如果创建新的热点,应该可以添加其他附件,例如描述图像。因此,热点实体及其附件之间应该存在某种关联/映射。在整体应用程序中,这可以通过使用JPA注释@OneToOne
或类似的注释来实现。
如何在微服务架构中实现这一目标?两个类都在单独的JAR /项目中!我考虑过独立于JPA仅将标识符存储为Long
。
还有“更好” /其他想法吗?
答案 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
服务,使您可以附加到几乎所有内容,但仍保持数据的规范化和快速查询。
我们可以动态构建EntityType
和Entity
数据集-如果有人想将标签添加到我们没有的类型或ID,我们会默默添加。