数据库触发器和JMS

Mr.*_*anh 3 database triggers jms

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

Nic*_*las 11

我将总结您的选择如下:

支持JMS的数据库

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

支持Java的数据库

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

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

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

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

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

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

最低公分母

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

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

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

我希望这可以帮到你.

  • 乐趣.想要接受答案吗? (3认同)