【问题标题】:Can someone please tell me how to link Sql 2012 database to activemq?有人可以告诉我如何将 Sql 2012 数据库链接到 activemq 吗?
【发布时间】:2013-09-09 00:49:46
【问题描述】:

请告诉我将 sql 2012 数据库服务器与 activemq 链接的最佳做法是什么

我想要实现的是,每当数据库发生变化时,我的 ativemq 都应该更新一条消息,其中包含数据库中发生的变化。

1.那么我应该如何在我的数据库中编码(比如触发器?)。 2.数据应该如何发送到activemq?我们需要像 java 应用这样的接口吗?

【问题讨论】:

标签: sql activemq


【解决方案1】:

不要在数据库中这样做。在您的应用中执行此操作。

虽然 SQL Server 可以托管可以连接到 ActiveMQ 服务器并提交消息的 CLR 过程,但这样做是个坏主意:

  • 编写连接外部资源的 SQLCLR 代码很棘手(您需要了解 SQL 调度和抢占的影响,阅读CLR Hosted Environment
  • 您添加耦合(如果 ActiveMQ 服务器不可用,您的触发器现在将失败)
  • 为了实现事务的正确性you must enroll ActiveMQ operation into your current transaction,使当前事务回滚触发器执行后,ActiveMQ操作也被回滚。使用 XA 和 SQL Server 的 DTC 不适合胆小的人。

更好的解决方案是在本地排队,进入您自己的数据库。要么使用table as a queue,要么使用Service Broker queues(顺便说一句,支持Activation)。然后,在提交后,从一个单独的侦听器进程处理这个本地队列。更高的可用性,更少的耦合,更高的吞吐量。如果真的需要 ActiveMQ,至少有一个本地中间队列将可用性解耦。让每个数据库操作等待外部 ActiveMQ XA 注册操作会降低您的吞吐量(DTC 慢)并且您必须处理可用性问题(没有可用的 ActiveMQ 和 XA,数据库中没有更新可能) .

【讨论】:

  • 我尝试过使用 Service Broker 队列,但它不适合我 Check this link
  • @remus 所以通过服务代理队列我可以让我的 sql 直接与 activemq 通信?我对activemq很陌生
  • @remus 使用服务代理确保您的事务在本地完成的出色解决方案,但是您将使用什么来将消息从服​​务代理发送到 ActiveMQ?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-16
  • 1970-01-01
  • 2012-09-16
  • 1970-01-01
  • 2011-03-10
  • 2022-01-23
  • 2011-09-30
相关资源
最近更新 更多