从Web API发布到消息队列

时间:2016-10-26 21:07:10

标签: c# asp.net-web-api

我有一个ASP.Net Web Api应用程序,它使用Entity Framework更新数据库中的某些实体。当某些更新时,我计划将更新发布到Azure Service Bus队列,然后由其他系统接收和处理。

我不太确定如何启动从Web Api向队列添加消息的过程。我知道在api中返回响应后我不能做太多,所以不确定是否要运行代码,或者可能引发事件。但是,我不希望有一个消息队列来将消息添加到主队列。

我不希望这会影响用户的响应时间,所以我希望异步执行此操作。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

Microsoft在the Azure Center中提供了一些关于设计模式和参考体系结构的链接。

如果您不想影响用户的响应,我会将消息转储到服务内部队列,并将这些消息发送到另一个工作服务器上的服务总线。如果消息传递是必要的,那么这可能是一个很好的策略,因为您可以保存数据并在必要时重新访问它。

我知道您说您不想影响响应时间,但确实希望在HTTP控制器操作中传递消息。以下是一些注意事项:

  1. 您的API相对于Azure队列安装在哪里?是否都在Azure?这些服务是否位于同一地点?
  2. 如果向Azure Service Bus发送失败,是否需要通知呼叫者?
  3. 您是否在控制器内执行任何其他处理,这取决于发布到服务总线的结果?
  4. 是否应该重新尝试?
  5. 如果#1是任何类似的东西"是的,"然后我建议您可以将发布的操作包装到任务中的服务总线,并根据该任务的结果(以及您正在执行的任何其他处理)确定您自己的结果。如果存在多个场景,并且#1为是,那么您还可以考虑使用两个实现公共接口的模块,但实质上是针对不同(安装)场景使用策略模式。

    如果您没有在任何位置共同定位或期望与Azure共处,那么值得考虑使用本地队列向某些工作人员发布消息并产生某种类型的工作人员处理该队列上的消息。您可能会发现这提供了用户体验和可靠性的最佳平衡。

    希望这有帮助。