Cound我创建了一个触发器来向JMS发送记录消息?如果是,我该怎么办? 提前谢谢!
答案 0 :(得分:11)
我将总结您的选择如下:
支持JMS的数据库
Oracle是我所知道的唯一一个以Oracle Advanced Queueing形式本身支持JMS的数据库。如果您的消息接收者对该JMS实现不太热衷,通常可以找到某种消息传递桥,它将消息从一个JMS实现转换并转发到另一个JMS实现。例如:
支持Java的数据库
某些数据库(如Oracle和DB2)具有内置的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语言,例如Perl,Python和Tcl,您可以使用一些聪明的脚本将消息发送到外部消息转换器,作为JMS前进。 Active MQ(及其消息桥)支持包含Python和Perl(和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。此外,这些服务器还可以创建调用程序的触发器。