作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们有一个客户端应用程序需要将消息发送到服务器以获取各种通知。为了客户端可以偶尔连接运行,我将采用消息队列方法。队列处理将从队列中取出消息并调用 Web 服务,该服务将把它们放在另一个队列中以进行最终处理。这个问题是关于客户端环境的;服务器环境已经确定。
我不想使用 MSMQ,因为我们无法控制所有客户端 PC 以正确安装/配置和保护 MSMQ,而且由于用于调查 MSMQ 队列内容的工具的质量,支持更具挑战性. SQL Server 2005 Express 安装在所有机器上,用于为我们的应用程序存储数据。
我目前有两种选择:
ThreadPool.QueueUserWorkItem
让它们由针对每种消息类型配置的处理程序进行处理。尽在 System.Transactions.TransactionScope
因此,只有在成功处理它们后,它们才会从持久队列中删除。 最佳答案
好吧,我不知道我会推荐 MSMQ,但我会建议有很多边缘情况需要考虑“自己动手”。
即使使用线程池方法,请注意,如果您关心,可能会存在排序问题 - 由于线程池处理工作项的方式,顺序发布到线程池的两个项目可能不会按顺序执行。
您还需要考虑消息的持久性、它们应该存在多长时间、如何检测“致命”未传递状态以及在这种情况下该怎么做。
在您的应用程序在排队消息的同时停机的情况下,还有许多潜在的边缘情况 - 例如,它可能无法确认消息已排队,即使它已排队。是的,你可以 ack 队列确认,但你可以无休止地进入 ack 圈子......
为什么不让应用程序检测它何时连接,并在那时发送所有数据?
关于.net - 持久消息/服务总线 - 自己动手还是冒险学习曲线?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/828778/
我是一名优秀的程序员,十分优秀!