在微服务架构中发送电子邮件

Kam*_*ski 6 email rest email-integration restful-architecture microservices

抱歉我的英语 - 如果有些事情不清楚请在评论中问我 - 我会澄清这一点.

我在微服务架构中构建系统.我有一个服务包含用户信息,一个服务用于"优惠",一个服务用于"创意".服务"提供"和"想法"通过Restful API(登录和其他操作)提供"用户"服务.我想知道 - 如何处理电子邮件?每个服务都有单独的前端,并在某些操作后发送电子邮件(例如,当某些第三人打开链接时,某些提供创建此优惠的用户将收到电子邮件,或者当某个用户创建想法时,管理员将收到电子邮件).此外,在每个服务前端,经理可以使用季节统计数据或其他一些信息创建"定期"邮件.每个服务电子邮件的外观不同,内容也不同.

我有很多选择,不知道哪个更好.这是一些主张:

  1. 每个服务都有自己独立的电子邮件系统,并发送各种电子邮件(行动后和定期)独立.
  2. "用户服务"具有发送动作的"引擎"以及定期发送的电子邮件和其他服务.内部任务中有指向任务的服务链接,该链接将生成电子邮件内容(例如定期电子邮件中的女巫统计数据).这个解决方案很复杂......
  3. "用户服务"只有定期发送电子邮件的引擎(任务有生成电子邮件正文的链接......)但是每个微服务独立者发送操作后发送电子邮件
  4. 创建新的微服务仅用于使用适当的API发送电子邮件(定期和"行动后").当然,像"商品"这样的服务也应该在邮寄任务中发送链接(自己) - 这个链接将在定期发送电子邮件时被调用,此链接的响应将生成电子邮件正文....

哪一个会更好?或者可能有更好的选择?

Vas*_*huk 5

发送电子邮件就像向另一个服务发送请求(通过SMTP).因此,当每个服务都能够发送电子邮件时,这是一个很好的方法.

但是,当然有一些常见的逻辑用于发送电子邮件,如渲染模板,发送代码,配置等.这个逻辑应该通过公共代码(dll,包等)在服务之间共享.

所以,通过这种方式:

  1. 当需要发送电子邮件时,每项服务都不依赖于其他服务
  2. 发送电子邮件的公共代码在服务之间共享
  3. 在发送专用电子邮件服务的情况下,您没有开发,部署和网络开销

这种方法的一个缺点是每个服务都应该具有相同的电子邮件配置(SMTP地址,登录名,密码等).但是,如果您在所有服务之间共享配置,那么这不是问题.

  • Dosnt那种打败微服务的目的?在多个服务之间共享代码将服务耦合在一起.微服务的重点似乎是解开应用程序逻辑.我越是想到它就越像反模式.我认为更好的"共享代码"方式是通过使用一种服务来包含你所说的所有电子邮件逻辑.这样您就可以通过服务而不是通过分布式库进行共享. (5认同)
  • “可复用的库短期内加快了开发速度,但会导致微服务之间的耦合。长期来看,会拖慢开发速度,增加协调工作,阻碍现代化。微服务不再独立。尤其是不要将共享库用于业务逻辑和模型。相反,接受冗余,引入共享服务或重新切片您的微服务。” https://blog.philipphauer.de/dont-share-libraries-among-microservices/ (3认同)
  • 选择如何通过dll或服务共享代码的Verty取决于您执行的任务.每个应用程序都使用很多共享代码,如框架库,数据库连接等.在这种特殊情况下,我推荐这个共享库.但是如果你有很多与发送电子邮件有关的逻辑,最好为此创建专门的服务. (2认同)