microservices - 微服务架构中的 Worker 服务
问题描述
很快我将开始一个基于微服务架构的项目,我需要开发的组件是工作服务(或守护程序)。
我对此有一些概念性的问题。我需要创建一个发送电子邮件和短信的工作人员服务。此工作人员服务需要数据来发送此电子邮件。另外,我需要创建一个微服务,允许用户创建需要由该 Worker 服务打磨的电子邮件列表。但是两者都需要使用来自同一个数据库的数据。
在我的工作服务中,我应该使用一个微服务资源来获取数据,或者这个工作服务与我的微服务有同一个数据库的连接是否可以?
还是最好让我的工作人员服务也具有 api 端点,让用户创建新的电子邮件列表、添加或修改配置以及我需要实现的所有其他功能?这听起来是个好主意,但我会得到一个有两个职责的组件,所以我对此有些怀疑。
提前致谢。
解决方案
两个微服务共享到同一个数据库的连接通常是一个坏主意。因为每个服务都应该是其自己的数据模型的所有者,其他任何人都不应直接访问它。如果一个服务需要另一个服务的域的数据,它应该让它通过 API 调用所有者,或者在它自己的数据库中以只读方式复制模型,并使用例如事件来更新它。
但是,我认为对于您当前的用例,最好的选择是向工作人员提供发送电子邮件所需的所有信息(地址、主题、正文、附件......),因此工作人员的唯一责任将发送电子邮件而不是获取信息。
它还可以提供批量发送电子邮件的功能。最后,该服务的职责将只有一个“发送电子邮件”,但它可以提供不同的方式来完成它(单个电子邮件,批量,带附件......等)
推荐阅读
- javascript - Videojs youtube视频没有在桌面Chrome的iframe中播放
- jquery - 使用 load() 在另一个内部调用 JQuery 一个 ajax
- node.js - 如何使用 Unity 和 Socket.IO 减少闪烁?
- amazon-web-services - 如何通过脚本将我的 ami 从一个帐户复制到另一个帐户
- maven - CentOS 中 POM.XML 文件的错误
- c++ - 是否允许并接受用删除标记静态方法?
- javascript - 什么 DOM 事件会更新 ReactJS 应用程序以及如何使用纯 Javascript 强制更新
- mongodb - 为什么 mongodb 查询不返回结果
- c# - Unity C#,如何让精灵只移动一次?
- c# - StandardOutput 在 C# 中返回空字符串