将JMS和Oracle AQ与MDB一起使用时:ORA-25228在12分钟内返回了1000多次

将JMS和Oracle AQ与MDB一起使用时:ORA-25228在12分钟内返回了1000多次,oracle,jms,ejb-3.0,weblogic11g,Oracle,Jms,Ejb 3.0,Weblogic11g,我在WebLogic10.3上部署了一个MDB,它正在Oracle AQ上侦听JMS队列 无论何时将消息放入队列,都可以毫无问题地处理它们。但是,在WebLogic和Oracle AQ之间的通信中,我看不到任何消息返回Oracle错误: ORA-25228: timeout or end-of-fetch during message dequeue 这里的问题是,如果返回错误,那么WebLogic会一次又一次地发送请求,因此我可以在12分钟内看到WebLogic和Oracle AQ 100

我在WebLogic10.3上部署了一个MDB,它正在Oracle AQ上侦听JMS队列

无论何时将消息放入队列,都可以毫无问题地处理它们。但是,在WebLogic和Oracle AQ之间的通信中,我看不到任何消息返回Oracle错误:

ORA-25228: timeout or end-of-fetch during message dequeue 
这里的问题是,如果返回错误,那么WebLogic会一次又一次地发送请求,因此我可以在12分钟内看到WebLogic和Oracle AQ 1000请求之间的巨大通信

如果我使用Spring而不是消息驱动Bean,我可以看到同样的问题,但是如果我将task executor task executor属性添加到jms侦听器容器,那么通信看起来很好,WebLogic和Oracle AQ之间的通信每隔120秒定期进行一次,并返回一个状态:

ORA-01403: no data found
有人知道如何正确配置MDB吗

12分钟内发出1000个请求

您可以为AQ-QUEUE设置*Max_retries*和*Retry_delay*属性,以设置重新交付限制和暂停重试次数

BEGIN DBMS_AQADM.CREATE_QUEUE(
   Queue_name          => 'MY_QUEUE',
   Queue_table         => 'MY_Q_TABLE',
   Queue_type          =>  0,
   Max_retries         =>  5,
   Retry_delay         =>  0,
   retention_time      =>  86400,
   dependency_tracking =>  FALSE
END;
/

好的,我已经试过了,没有改变-无论我在那里设置了什么,错误总是每秒返回几次。实际上,我正在寻找一种解决方案,它会返回另一个错误ORA-01403。我真的不明白为什么在这种情况下返回ORA-25228 ORA-01403通常由PL/SQL过程在选择时抛出。。。成为经纪人。您是否使用任何PL/SQL代码来处理AQ?您使用的Oracle DB版本是什么?这两个错误都会返回,具体取决于所使用的技术-因此我假设生成的SQL不同-版本Oracle 10g 10.2.0.5.0如果您通过PL/SQL读取消息,请尝试设置选项:v_dequeue_options.wait:=1;或v_dequeue_options.navigation:=dbms_aq.first_message;然后检查您的消息是否未处于就绪状态:SQL>-因此引发了ORA-25228,但消息存在于就绪状态。SQL>从aq$test_表中选择不同的msg_状态,其中queue='test_queue';将TEST_QUEUE和aq$TEST_table替换为您的队列和表。为此,我没有使用PL/SQL将消息出列,只是将消息入列。但是,即使队列中没有任何内容,问题仍然存在。如果消息被放入队列,那么它将被拾取和使用,因此select似乎没有问题。