首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我应该为这个场景发布或发送消息吗?

我应该为这个场景发布或发送消息吗?
EN

Stack Overflow用户
提问于 2016-05-07 10:45:52
回答 1查看 361关注 0票数 2

我来晚了消息传递派对,所以我对这个简单的场景有点困惑。我有一个有反馈表单的网站,当用户发送他们的反馈--我的业务需求状态--我需要坚持反馈以供报告,向产品经理发送电子邮件,并向发件人发送一封感谢电子邮件。

现在我看到了几种不同的选择:

  1. web服务器将持久化反馈(异步数据库调用)并在总线上发布一个FeedbackCreated事件。
  2. web服务器将在总线上发送一个SendFeedback命令,终结点将有一个消息处理程序,该处理程序将保持反馈并发布将由同一端点处理的FeedbackCreated事件(还是应该为电子邮件发送两条本地消息??)
  3. web服务器将在总线上发送一个SendFeedback命令,并且端点将有一个开始并接管的传奇。

因此,我想我很困惑,在反馈被持久化到数据库之后,我应该发布一个事件还是发送两个消息(这些消息将在本地处理)?请不要信息没有所有的电子邮件的信息,所以更多的信息将需要查找。

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-07 14:04:26

正如您已经说过的,有几种方法可以实现这个流。我只会告诉你我喜欢哪一个,然后说几句为什么:)

首先,我会尽量避免访问数据库,并在单个web请求中发布到总线。在web请求中所能做的事情越少,越好--使用总线处理一条消息通常是您可以做的最安全的事情,因为它不会查找订阅者,它不会在数据库中陷入死锁,而且它通常不会受到任何其他因素的影响。

因此,我会await bus.Send(new CreateFeedback(...)),然后网络请求就会结束。

在后端,我可能会实现您的第二个选项,即有一个将反馈保存到数据库的IHandleMessages<CreateFeedback>,一旦这样做了,它肯定可以是await bus.Publish(new FeedbackCreated(...))

然后,您可以让同一个端点(或另一个端点)订阅FeedbackCreated,然后让那里的几个处理程序做他们需要做的任何SmtpClient事情。

请注意,如果您在同一个端点中处理事件,您肯定可以有两个单独的处理程序,但是它们不能独立地成功/失败。这可能需要有两个独立的端点订阅FeedbackCreated事件。

我希望这是有意义的:)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37087561

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档