数据库触发器和JMS

时间:2011-07-18 07:23:59

标签: database triggers jms

Cound我创建了一个触发器来向JMS发送记录消息?如果是,我该怎么办? 提前谢谢!

2 个答案:

答案 0 :(得分:11)

我将总结您的选择如下:

支持JMS的数据库

Oracle是我所知道的唯一一个以Oracle Advanced Queueing形式本身支持JMS的数据库。如果您的消息接收者对该JMS实现不太热衷,通常可以找到某种消息传递桥,它将消息从一个JMS实现转换并转发到另一个JMS实现。例如:

支持Java的数据库

某些数据库(如OracleDB2)具有内置的Java虚拟机,并支持加载第三方库(Jars)和可由触发器代码调用的自定义类。根据JMS客户端的要求,这是一个问题,因为支持的Java版本(如果您需要Java 5+但DB仅支持Java 3)。还要记住,其中一些嵌入式JVM中的线程是not what you might expect it to be,但是,人们也可能期望发送JMS消息可能比接收JMS消息更加宽容。

支持外部调用的数据库(但不支持Java)

多个数据库支持向连接的客户端触发异步事件的不同方法,这些方法又可以转发从事件的有效负载构建的JMS消息:

某些数据库(以上所有内容,包括SQLServer)允许您从数据库过程代码(可以由触发器调用)发送SMTP消息。虽然它不是JMS,但邮件侦听器可能会侦听邮件消息(可能方便地拥有JSON或XML消息体)并将此内容转发为JMS消息。

此基本替代方案是允许HTTP帖子调用外部源的数据库包,您可以在其中监听servlet并将提交的内容作为JMS消息转发。

其他数据库(如Postgres)支持非Java语言,例如PerlPythonTcl,您可以使用一些聪明的脚本将消息发送到外部消息转换器,作为JMS前进。 Active MQ(及其消息桥)支持包含PythonPerl(和many others)的多语言JMS客户端。

最低公分母

除此之外,您的触发器可以将事件写入表,外部客户端可以轮询表的内容,查找新数据并在找到时转发JMS消息。 JMS消息可以包含内容,也可以只指示内容存在以及PK是什么,消费者可以来获取它。

这是Apache Camel中广泛支持的一种技术,它具有专门用于轮询数据库的适配器(技术上称为组件):

然后可以转换Camel从数据库表读取的事件并将其路由到各种目的地,包括JMS服务器(以JMS消息的形式)。实现这个Camel非常简单,并且有很好的文档记录,因此这不是一个糟糕的方法。

我希望这很有帮助。

答案 1 :(得分:0)

IBM z 和 i 系列服务器具有带有本地 SQL 功能的 db2,例如发送到 IBM MQ 的 MQSEND 以及从 IBM MQ 读取的 MQREAD。此外,这些服务器还可以创建调用程序的触发器。