我来晚了消息传递派对,所以我对这个简单的场景有点困惑。我有一个有反馈表单的网站,当用户发送他们的反馈--我的业务需求状态--我需要坚持反馈以供报告,向产品经理发送电子邮件,并向发件人发送一封感谢电子邮件。
现在我看到了几种不同的选择:
因此,我想我很困惑,在反馈被持久化到数据库之后,我应该发布一个事件还是发送两个消息(这些消息将在本地处理)?请不要信息没有所有的电子邮件的信息,所以更多的信息将需要查找。
谢谢!
发布于 2016-05-07 14:04:26
正如您已经说过的,有几种方法可以实现这个流。我只会告诉你我喜欢哪一个,然后说几句为什么:)
首先,我会尽量避免访问数据库,并在单个web请求中发布到总线。在web请求中所能做的事情越少,越好--使用总线处理一条消息通常是您可以做的最安全的事情,因为它不会查找订阅者,它不会在数据库中陷入死锁,而且它通常不会受到任何其他因素的影响。
因此,我会await bus.Send(new CreateFeedback(...)),然后网络请求就会结束。
在后端,我可能会实现您的第二个选项,即有一个将反馈保存到数据库的IHandleMessages<CreateFeedback>,一旦这样做了,它肯定可以是await bus.Publish(new FeedbackCreated(...))。
然后,您可以让同一个端点(或另一个端点)订阅FeedbackCreated,然后让那里的几个处理程序做他们需要做的任何SmtpClient事情。
请注意,如果您在同一个端点中处理事件,您肯定可以有两个单独的处理程序,但是它们不能独立地成功/失败。这可能需要有两个独立的端点订阅FeedbackCreated事件。
我希望这是有意义的:)
https://stackoverflow.com/questions/37087561
复制相似问题