Rest 将数据从UI添加到不同的微服务
假设您有一张用户注册表,您在其中填写以下表格: 姓名、姓氏、年龄、地址、首选通信方式:短信、电子邮件(单选按钮)Rest 将数据从UI添加到不同的微服务,rest,oop,domain-driven-design,microservices,Rest,Oop,Domain Driven Design,Microservices,假设您有一张用户注册表,您在其中填写以下表格: 姓名、姓氏、年龄、地址、首选通信方式:短信、电子邮件(单选按钮)您有两个微服务: 用户管理服务 通信服务 注册用户后,我们应该在2个服务中创建2个聚合:UserManagementContext中的用户和Communications中的UserCommunications设置。我有三种方法可以实现这一点: 从UI执行2个不同的请求。如果其中一个失败了怎么办 将所有数据放在User中,然后使用所有数据引发集成事件,并在CommunicationC
您有两个微服务:
- 用户管理服务
- 通信服务
我有三种方法可以实现这一点:
UserRegistered
事件被发送,其中包含用户的IDUserRegistered
事件UserRegistered
事件被发送,其中包含用户的IDUserRegistered
事件我会选择slim事件,因为您的服务可能需要不同的用户数据,最好让他们自己获取这些数据,而不是将所有内容都放在事件中。正如您提到的存储通信设置,假设通信数据不属于UserManagement服务的有界上下文的一部分 我看到在另一个答案中提出的方法#3有几个问题。虽然我认为原始答案中的方法#3与我的答案非常相似
- 如果添加更多的通信模式会怎么样?当然,它只会导致通信服务的更改,而不会导致用户管理服务的更改。通信设置MS应将所有通信设置相关数据存储在其自己的数据存储中
- 如果用户仅更新其通信设置首选项,该怎么办?为什么用户管理服务应该承担处理这个问题的责任?通信设置的更改应该仅仅触发其相应的微服务的更改,在我们的例子中,微服务就是通信服务
- 我只是觉得最好使用一些自然键来跨微服务识别和关联实体,而不是由DB生成的内部ID。考虑到明天您决定使用完全不同的策略来为用户管理服务创建用户的“ID”,例如非数字ID、不同的ID生成算法等。我希望保持其他微服务不受任何这样的决定的影响。
- 在体系结构中包括API网关。前端始终与API网关通信
- API网关将命令发送到消息队列,如
,供感兴趣的微服务使用李>RegisterUser
- 如果您希望保持架构简单,可以发布一条消息,其中包含任何感兴趣的微服务都可以使用的所有数据。如果您严格希望单个micro服务只查看其相关数据,请根据使用服务所需的唯一数据结构创建消息队列
正如您提到的存储通信设置,假设通信数据不属于UserManagement服务的绑定上下文 我看到在另一个答案中提出的方法#3有几个问题。虽然我认为原始答案中的方法#3与我的答案非常相似
- 如果添加更多的通信模式会怎么样?当然,它只会导致通信服务的更改,而不会导致用户管理服务的更改。通信设置MS应将所有通信设置相关数据存储在其自己的数据存储中
- 如果用户仅更新其通信设置首选项,该怎么办?为什么用户管理服务应该承担处理这个问题的责任?通信设置的更改应该仅仅触发其相应的微服务的更改,在我们的例子中,微服务就是通信服务
- 我只是觉得最好使用一些自然键来跨微服务识别和关联实体,而不是由DB生成的内部ID。考虑到明天您决定使用完全不同的策略来为用户管理服务创建用户的“ID”,例如非数字ID、不同的ID生成算法等。我希望保持其他微服务不受任何这样的决定的影响。
- 在体系结构中包括API网关。前端始终与API网关通信
- API网关将命令发送到消息队列,如
,供感兴趣的微服务使用李>RegisterUser
- 如果您希望保持架构简单,可以发布一条消息,其中包含任何感兴趣的微服务都可以使用的所有数据。如果您严格希望单个micro服务只查看其相关数据,请根据使用服务所需的唯一数据结构创建消息队列
这也是我的首选方法