2

我正在考虑使用 Oracle Advanced Queuing 技术进行异步通信。我的目标是将它用于并发流程执行(异步 PL/SQL 过程调用)。

当前用于并发进程执行的遗留实现是由 Unix KornShell (ksh) 脚本组成的,我们通过后台模式下的 SSH 连接从前端开始。它对我们来说很好,但我对这种解决方案不满意,因为:

  • 安全性(前端启动 SSH 连接并在后台模式下执行 ksh 脚本。从我们的同事那里我注意到这种登录在我们公司会受到限制。)
  • 维护(不是我们团队的每个人都熟悉 ksh 脚本)
  • 技术的多样性(由于技术诀窍和迁移努力,我试图减少技术的多样性)
  • 记录(我们的后端系统记录到数据库日志表中,并发执行部分记录到日志文件中)

通过从 ksh 迁移到数据库,我将能够提高系统的整体质量:

  • 安全性(不再使用 SSH 连接,前端将向数据库发送消息,数据库消息侦听器将对消息做出反应并异步执行程序)
  • 维护(我们使用我们熟悉的PL/SQL)
  • 技术多样性(通过下一次操作系统迁移,我们只需要迁移数据库对象和数据)
  • 日志记录(我们将充分使用我们的后端日志记录解决方案)

您如何看待我的考虑以及您对 Oracle Advanced Queueing 的体验如何?特别是在稳定性、性能和维护方面?有更好的选择吗?

4

2 回答 2

2

我显然不知道你项目的细节,但如果异步 PL/SQL 过程调用是你唯一的目标,使用 DBMS_SCHEDULER 可能更容易。您的程序可以通过调用您的 PL/SQL 的调度程序提交作业以“立即运行”。在我看来,调度程序比 AQ 更容易使用。

于 2012-01-23T15:37:18.813 回答
2

使用异步队列管理流 Oracle 带来了优点和缺点:

优点

  1. 能够按类型创建临时代码来管理流,在该代码上创建处理程序(作业事件或应用程序)以管理各种子流
  2. 很容易推出关闭DEQUEUE Queue的一整类流程。
  3. 管理 INSERT TIME 或 PRIORITY 的 MSG 的优先级(创建 Coda 中的参数)或 PRIORITY(有效负载中的 msg 参数) 管理带有截止日期或已用时间的消息。
  4. 将范例与 EVENT no POLLING 的解决方案对齐

缺点

  1. 业务逻辑的负载都将在数据库上。
  2. 安装新 PKG 时,您需要停止队列(排队和出队)以重新启动指向 PKG 的 HANDLER。
  3. 必须实施恢复系统 msg 处理不正确。

我认为一个好的解决方案是在尾部 ORACLE 上使用 CODE JMS(JMS 提供程序),以便在 JAVA 上移动 BL,并利用包括 Logging 在内的语言的各种潜力。

于 2014-12-05T14:56:26.210 回答