是否建议将.NET Web应用程序作为RabbitMQ生产者?
我问这个是因为不推荐使用RabbitMQ消费者内部IIS Web应用程序:https://stackoverflow.com/a/25571635/2107373
就我而言,ASP.NET Web应用程序托管在IIS上,并在负载均衡器(多个实例)后面运行。
答案 0 :(得分:0)
我们有一个Web应用程序,它将消息排队到RabbitMQ上,供后端的其他应用程序使用,不会遇到任何问题。
您提到的问题中提到的问题与IIS应用程序池的不可靠性有关,并不总是可以使用消息,如果您处理在内部创建和排队消息的所有工作,这应该不是问题用户请求的范围。
如果是这种情况,则成功处理请求 - 创建并排队的消息并发送确认响应或发生错误 - 未发送任何消息并通知用户回应的方式。
我们遇到的最大挑战是处理发送重复消息的可能性 - 在我们的案例中,我们检查了消费应用程序,以确保工作没有完成两次,并且还将RabbitMQ生产者绑定到底层的范围(sql)数据库事务,因此它仅在成功提交时发送。
关于使用RabbitMQ作为实现后端作业处理的机制的优势,这里也有一个有用的答案:Use of messaging like RabbitMQ in web application?
答案 1 :(得分:0)
我在生产中有一些非常可靠的东西。它只发布消息,因此唯一的问题是管理与代理的连接。根据您不想打开连接的消息量,发布单个消息然后将其关闭。
我使用缓存来处理这个问题。使用滑动过期缓存连接对象(实际上是EasyNetQ总线),并注册CacheItemRemoved
回调以在窗口生命周期内未使用时关闭连接。我也将优先级设置为CacheItemPriority.NotRemovable
。
我不确定您的网络服务器场中是如何设置缓存的,因此可能存在序列化问题。在每台服务器上将其缓存在内存中应该可以正常工作。