【发布时间】:2012-11-29 00:03:43
【问题描述】:
谁能告诉我是否可以将数据从 SqlServer 触发器直接推送到 ActiveMQ。
我搜索了 ActiveMQ 文档,但没有看到任何对它的引用。我们可以使用服务轮询数据库以获取插入,但触发器将是理想的解决方案。
【问题讨论】:
标签: sql-server activemq
谁能告诉我是否可以将数据从 SqlServer 触发器直接推送到 ActiveMQ。
我搜索了 ActiveMQ 文档,但没有看到任何对它的引用。我们可以使用服务轮询数据库以获取插入,但触发器将是理想的解决方案。
【问题讨论】:
标签: sql-server activemq
但触发器将是理想的解决方案
绝对不是。这是一个坏主意的原因有很多,但我会告诉你主要的:
其中一些问题可以通过将应用事务与排队系统一起注册到分布式事务 (2PC) 中来解决,即 . XA for ActiveMQ。这解决了最后一个问题,但代价是增加了严重的延迟并将吞吐量降低了几个数量级。
提倡的解决方案是在本地table used as a queue 中使触发器入队,并让外部应用程序从该表中出列并推送到ActiveMQ。不要偷工减料并将您的应用程序状态用作“队列”(即轮询状态并标记为“已处理”),这就是 99% 的“数据库中的队列”尝试失败的原因。
当您将数据存储与队列存储分离时,您仍然无法解决一些固有的问题(无法进行一致的备份/恢复,HA/DR 故障转移时的“脑裂”如排队不遵循数据库故障转移等)但只有当您购买嵌入在数据库中的排队和消息传递时才能解决这些问题,例如Service Broker。
【讨论】:
我会说可以在 Sql Server 中创建一个 UDF,该 UDF 在 .NET 中运行代码并创建一个 UDP/TCP 连接 ActiveMQ 服务器。
我已经通过这种方式在 SqlServer 数据库上建立了很多网络,在本地网络中创建了非阻塞连接。
【讨论】: