Java 实时使用、发送消息和保存应用程序B中应用程序A的审核数据的最佳方法

Java 实时使用、发送消息和保存应用程序B中应用程序A的审核数据的最佳方法,java,database,clrstoredprocedure,Java,Database,Clrstoredprocedure,我最初的方法是在应用程序a的数据库中使用一个存储过程,在插入时触发该存储过程以收集额外的数据并调用由应用程序B托管的web服务,以便在那里进行必要的映射和持久化。应用程序A和应用程序B可能不在同一台机器上。最初的要求是在应用程序a端支持SQL Server数据库。我想到了一个CLR存储过程。然而,有人认为调用web服务不仅会对SQL Server引擎的性能产生严重影响,而且还需要提升DBA不愿意给出的过程的权限 我现在考虑的是在数据库A上创建某种形式的引用表的过程,以及使用这些数据的轮询应用程序

我最初的方法是在应用程序a的数据库中使用一个存储过程,在插入时触发该存储过程以收集额外的数据并调用由应用程序B托管的web服务,以便在那里进行必要的映射和持久化。应用程序A和应用程序B可能不在同一台机器上。最初的要求是在应用程序a端支持SQL Server数据库。我想到了一个CLR存储过程。然而,有人认为调用web服务不仅会对SQL Server引擎的性能产生严重影响,而且还需要提升DBA不愿意给出的过程的权限

我现在考虑的是在数据库A上创建某种形式的引用表的过程,以及使用这些数据的轮询应用程序,并在应用程序B处理后进行清理。然而,我不能不认为除了轮询数据之外还有更好的方法


应用程序A仅适用于Windows。应用程序B可以是Windows、UNIX或LINUX,因此Java将是这方面显而易见的选择。

您已经给了我们一个您考虑过的方法列表,但除了这个问题的一句话标题之外,您还没有真正概括出您正试图实现的目标,等等。你能确切说明你的要求是什么吗

应用程序之间异步消息传递的标准答案是使用JMS。每当队列中发生应审核的事件时,应用程序A将消息放置到队列中,而应用程序B则被写入以一定速率使用队列中的消息(如果需要“实时”,则可以经常轮询队列)。然后,应用程序B可以对这些消息执行任何需要的操作—将它们写入数据库,将它们发送到另一个web服务等

通过这种方式,应用程序A中的操作(您想要审核的内容)和应用程序B的行为(您想要审核消息的方式)彼此完全解耦。这允许您在不改变另一端的情况下,更改任意一端的内容—审核新类型的事件、更改消息的有效负载、将消息输出到其他地方等等

它还允许您独立于另一个应用程序扩展两个应用程序-您可以添加更多的A实例而不影响B,A生成消息的速率比B使用消息的速率高得多,并且A不会等到B完成消息的使用后才能够响应用户的操作