日历

2008 7.6 Sun
  12345
6789101112
13141516171819
20212223242526
2728293031  
«» 2008 - 7 «»

文章搜索

日志文章

2008年05月08日 10:45:57

如何异步调用存储过程

关于异步调用PL/SQL程序,已经有过很多讨论。pub曾经有个一个很长时间的置顶贴。
以前最接近解决异步调用的方法,无非是JOB+任务队列表。每次将任务提交到一个队列表,
然后有一个轮询job,每隔一段时间检查是否有待处理任务,如果有则提取调用程序执行,并
维护任务状态。
的确,这实现提交和执行的异步。但是有一个缺陷,JOB(scheduler)的对任务的执行是串行
,必须等到
一个任务完成以后,才能继续读取下一个,如果执行时间大于间隔,那么间隔实际就失去了意义。
对于,现在大型企业应用要求稳定性,可伸缩性,可维护性,这种方法可能就过于简单。
那么,我推荐使用Oracle Advanced queue(AQ)来解决。AQ是一个非常强壮的Oracle应用。
它实现的功能,就是一个完整消息队列机制,而且利用AQ的通知机制,可以实现异步+并发的任务
调用,而且AQ的创建、修改、监控、维护都有Oracle提供的相关包和视图,非常便利。AQ的作用
,如果大多数oralce的包一样,被低估和忽略太久了。
一个基于AQ的异步+并发的过程是这样的:
1.创建执行的过程TEST
2.创建队列表,用于存储消息体
3.利用改对队列表,创建队列
4.创建通知的过程,在通知的过程中调用TEST过程
5.注册通知到队列
那么,当执行一次equeue的时候,队列会得到通知,就会在通知里面调用TEST过程,调用
dequeue删除消息。
如果同时有五个client执行equeue,那么后台就会有5个TEST过程同时被调用。
异步+并行都可以实现。
而且除了PL/SQL,AQ还调用邮件、JMS的消息方式。
关于AQ的简单使用方法,请参考另外一篇文章:
http://blog.ccidnet.com/blog.php?do=showone&uid=51502&type=blog&itemid=233539

Tags: 异步   存储过程  

类别: SQL/PLSQL |  评论(0) |  浏览(1880) |  收藏
发表评论