Architecture 事务排队/出列

Architecture 事务排队/出列,architecture,transactional,queuing,Architecture,Transactional,Queuing,我需要以可靠/事务性的方式为外部系统排队事件和任务。使用MSMQ或ActiveMQ看起来非常诱人,但事务部分变得复杂(MSDTC等) 我们可以使用数据库(SQLServer2005+,Oracle9+),实现更简单的事务支持,但排队部分变得更难看 这两条路线似乎都没有那么好,充满了令人讨厌的陷阱和边缘案例 有人能在这件事上提供一些实际的指导吗 想一想:E/C/A或一个定时任务引擎,它每隔一段时间就会唤醒,看看此时是否有任何定时任务需要运行(即,下一个运行日期已经过去,但到期日期尚未到达)。是一个

我需要以可靠/事务性的方式为外部系统排队事件和任务。使用MSMQ或ActiveMQ看起来非常诱人,但事务部分变得复杂(MSDTC等)

我们可以使用数据库(SQLServer2005+,Oracle9+),实现更简单的事务支持,但排队部分变得更难看

这两条路线似乎都没有那么好,充满了令人讨厌的陷阱和边缘案例

有人能在这件事上提供一些实际的指导吗


想一想:E/C/A或一个定时任务引擎,它每隔一段时间就会唤醒,看看此时是否有任何定时任务需要运行(即,下一个运行日期已经过去,但到期日期尚未到达)。

是一个开源作业调度系统。

WebSphere MQ(MQ Series)是一个选项吗?Is支持事务性消息传递。

我见过MSMQ以事务性方式使用,它似乎并不特别复杂-事务作用域将入队或出队调用与数据库访问打包在一起,只要队列一经创建就定义为事务性,一切都很好。我不认为ActiveMQ是这样的,它是一个消息代理,但是MSMQ安装在每个端点机器上的本地位置,因此以事务方式将项目放入队列不需要复杂的分布式事务

您可能已经意识到了这一点,但是在.NET上有一些轻量级库,它们通过MSMQ(理论上也包括其他传输)提供了一些不错的抽象

N服务总线:

公共交通:

此外,Oren Eini还有一个有趣的、基于实验性文件系统的事务队列。此库的好处是,与MSMQ不同,它可以作为库进行部署,并且不需要部署MSMQ所带来的维护难题

你可以在这里阅读:

另外,SQLServer2005使用SQLServerServiceBroker处理队列的方式非常优雅,但您需要在每个端点安装SQLServer,我不知道SSB是否跨越防火墙


最后,如果你没有得到你在这里寻找的答案,我强烈推荐nSErviceBus讨论论坛。Udi Dahan和他的一小群以信息为导向的追随者一起回答了这类问题,这是迄今为止我找到的最好的资源,可以让我的以队列为导向的问题得到快速、胜任的回答。该论坛就在这里:

我们的系统有60台计算机,每台计算机运行12个任务(线程),需要“获得下一份工作”。总的来说,每天有5万个“工作”。计算一下每分钟有多少个事务,并意识到任务时间是可变的,因此有可能在同一时间获得多个“pop”事件

我们有了使用MSMQ的第一个版本。结论:远离。虽然它在负载和同步问题上做得很好,但它有两个问题。一个讨厌的人和一个交易破坏者

恼人的是:作为企业级软件,MSMQ有安全需求,这使得它更需要设置并和客户网络管理员进行斗争

交易破坏者:然后是我们想要接下一份工作的时候,但不是用简单的流行音乐,而是像“接下一份蓝色工作”或“接下一份黄色工作”之类的东西。不行

我们开始计划B:用一个SQL2005表实现我们自己的Q再快乐不过了

我每天用20万条短信来测试它,效果很好。我们可以把“下一步”的逻辑复杂到我们想要的程度

要点:您需要非常小心使用接受下一项的SQL。因为你希望它是快速和非锁定的。根据一些研究,我们使用了两个非常重要的SQL提示。魔法是这样的:

SELECT TOP 1 @Id = callid
FROM callqtbl WITH (READPAST, XLOCK)
where 1=1 ORDER BY xx,yy

这就是MSMQ的设计目的——对事务进行排队。如果这对您不起作用,请查看SQL Server的“Service Broker”功能——“csmba”在其回答中描述的“SQL表中的队列”,但它是一个集成的SQL Server组件,可以很好地打包并公开供您使用。

您可以查看名为

的Oracle功能。其事务处理是否也包括数据库事务(分布式事务)?它值得吗?它可能不值得,因为它有自己的内部事务处理,仅用于消息传递系统。若您还想在get/put中包含DB调用,那个么您还需要MSDTC goo(假设Windows)MQ Series在任何非常有趣的东西上运行:有趣的是,我一定要看一下。SSB使用配置为使用UDP端口的端点。所以防火墙可以配置为匹配,你能更深入地解释一下这个查询吗?蒂亚!