可以将SqlServer触发器推送到ActiveMQ

时间:2012-12-11 12:14:09

标签: sql-server activemq

任何人都可以告诉我是否可以将数据从SqlServer触发器直接推送到ActiveMQ。

我已经通过ActiveMQ文档进行了搜索,但没有看到任何对它的引用。我们可以使用轮询DB进行插入的服务,但触发器将是理想的解决方案。

2 个答案:

答案 0 :(得分:2)

  

但触发器将是理想的解决方案

绝对不是。有很多理由说明这是个坏主意,但我会给你主要的理由:

  • 在每个DML上添加延迟,因为您需要等待RPC调用才能完成。
  • 当ActiveMQ存在可用性问题时(RPC调用失败,将DML与原始应用程序事务一起使用),随机和不稳定行为导致的操作失败
  • 存在回滚时的正确性。仅这一点就是一个完整的展示塞。如果运行触发器的应用程序事务因任何原因回退,则无法撤消ActiveMQ操作。

其中一些可以通过在分布式事务(2PC)中与排队系统一起注册app事务来解决,即。 XA for ActiveMQ。这解决了最后一个问题,但代价是增加了严重的延迟并将吞吐量降低了几个数量级。

提倡的解决方案是让触发器在table used as a queue中本地排队,并让外部应用程序从此表中出列并推送到ActiveMQ。不要偷工减料并将您的应用程序状态用作“队列”(即轮询状态并标记为“已处理”),这就是99%的“数据库中的队列”尝试失败的原因。

当您从队列存储中拆分数据存储时,您仍然无法解决一些固有的问题(无法进行一致的备份/恢复,对于HA / DR的故障转移,“拆分大脑”排队不遵循数据库故障转移等)但这些只有在购买数据库中嵌入的排队和消息时才能解决,如Service Broker

答案 1 :(得分:0)

我想说可以在Sql Server中创建一个UDF,该UDF在.NET中运行代码并创建一个UDP / TCP连接ActiveMQ服务器。

我已经通过SqlServer数据库完成了很多联网工作,从而在本地网络中创建了非阻塞连接。