我们有一个客户端应用程序需要向服务器发送消息以获取各种通知。为了客户端可以偶尔连接运行,我将使用消息队列方法。队列处理将从队列中取出消息并调用 Web 服务,该服务会将它们放在另一个队列中以最终进行处理。这个问题是关于客户端环境的;服务器环境已经确定。
我不想使用 MSMQ,因为我们无法控制所有客户端 PC 以正确安装/配置和保护 MSMQ,而且由于用于调查 MSMQ 队列内容的工具质量,支持更具挑战性. SQL Server 2005 Express 在所有机器上,用于为我们的应用程序存储数据。
我目前有两个选择:
- 编写一个相当基本的持久消息队列,在序列化消息后将消息存储在表中,然后使用
ThreadPool.QueueUserWorkItem
针对每种消息类型配置的处理程序处理它们。总之,System.Transactions.TransactionScope
如果它们被成功处理,它们只会从持久队列中删除。 - 在客户端上使用 NServiceBus(这是我们作为一个团队使用的服务总线,因此 MassTransit 等不是选项),以及使用本地数据库的 Service Broker 传输。
我对服务总线几乎没有经验(我仍然没有真正了解服务总线术语),因此与编写更简单的东西以我需要的方式满足我的要求相比,我担心学习曲线(部署是一个大考虑)。
有人有想法吗?