0

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

我想要实现的是,每当数据库中发生某些变化时,我的 ativemq 应该使用一条消息进行更新,该消息具有数据库中发生的变化。

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

4

1 回答 1

0

不要在数据库中执行此操作。在您的应用程序中执行此操作。

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

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

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

于 2013-09-05T09:16:28.807 回答