RabbitMq producer insider .NET web 应用程序

RabbitMq producer insider .NET web application

是否建议将 .NET Web 应用程序作为 RabbitMQ 生产者?

我问这个是因为不建议使用 RabbitMQ consumer insider IIS web 应用程序:

就我而言,ASP.NET Web 应用程序托管在 IIS 上并在负载平衡器(多个实例)后面运行。

我们有一个 Web 应用程序将消息排队到 RabbitMQ 上以供后端的不同应用程序使用,并且没有遇到任何问题。

您提到的问题中提到的问题与 IIS 应用程序池的不可靠性有关,该应用程序池并不总是可用于使用消息,如果您处理创建和排队的所有工作,这应该不是问题用户请求范围内的消息。

如果是这种情况,则请求被成功处理 - 创建消息并排队并发送确认响应 出现错误 - 未发送任何消息并且通过不同的响应通知用户。

我们遇到的最大挑战是处理发送重复消息的可能性 - 在我们的例子中,我们检查了消费应用程序以确保工作没有完成两次,并将 RabbitMQ 生产者绑定到范围底层 (sql) 数据库事务,因此它仅在成功提交时发送。

关于使用 RabbitMQ 作为实现后端作业处理的机制的优势,这里还有一个有用的答案:Use of messaging like RabbitMQ in web application?

我在生产中有一些非常可靠的东西。它只发布消息,所以唯一关心的是管理与代理的连接。根据您不想打开连接的消息量,发布一条消息然后关闭它。

我使用缓存来处理这个问题。连接对象(实际上是 EasyNetQ 总线)使用滑动过期进行缓存,如果在 window 生命周期内未使用,则注册 CacheItemRemoved 回调以关闭连接。我也将优先级设置为 CacheItemPriority.NotRemovable

我不确定您的缓存是如何在整个网络场中设置的,因此可能存在序列化问题。将它缓存在每个服务器的内存中应该可以。