gpt4 book ai didi

c# - MSMQ并发处理设计问题

转载 作者:太空狗 更新时间:2023-10-29 21:45:59 26 4
gpt4 key购买 nike

我有一个用 C# 编写的 Windows 服务,它从 MSMQ 读取并根据消息的类型将它们分配给在工作线程中处理该消息的代理。该应用程序在没有代理的情况下启动,并在消息到达 MSMQ 时在运行时动态创建

这是它如何工作的基本图:

enter image description here

如果代理工作线程正忙于工作,则消息将排队到其本地队列。到目前为止,一切都很好。但是如果由于某种原因服务停止了,本地队列的内容就会丢失。

我正在尝试找出处理这种情况的最佳方法。现在,本地队列是 System.Concurrent.ConcurrentQueue。我可能会使用 Sql Ce 数据库或其他一些持久存储,但我担心性能。我想到的另一件事是仅当代理准备好处理消息时才从 MSMQ 读取,但问题是我不知道 MSMQ 将包含什么消息。

我可以采取哪些可能的方法来解决这个问题?

最佳答案

您的设计基本上实现了以下模式:http://www.eaipatterns.com/MessageDispatcher.html

但是,您选择在多线程代码中实现调度程序,而不是使用实际的消息传递。

相反,每个处理代理应该是一个自治进程,具有自己的物理消息队列。这就是在发生故障时提供消息持久性的原因。它还允许您通过托管更多处理代理实例来简单地进行扩展。

关于c# - MSMQ并发处理设计问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11535813/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com