oracle AQ topic 拿不到消息

艾德 2009-04-15 11:31:55
遇到一个很奇怪的问题,对于oracle AQ的topic, 用下面的代码片断一直拿消息, 如果message是在循环过程中enqueue的,就会拿不到消息。如果消息在循环之前enqueue的就可以拿到
while (true){
msg = tSub.receiveNoWait();
if (msg != null) {
System.out.println("the message " + ((TextMessage) msg).getText());
} else {
System.out.println("====no message====");
Thread.sleep(1000);
}
}

另外,如果把tSub.receiveNoWait()换成tSub.receive(500)就可以拿到消息。

receiveNoWait是不是有什么猫腻在里面啊!j2ee spec上说这个API应该可以拿到消息当消息是immediately available (Receives the next message if one is immediately available.)这个immediately available何解呢?
...全文
111 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
艾德 2009-04-16
  • 打赏
  • 举报
回复
自顶
zjnoall 2009-04-15
  • 打赏
  • 举报
回复
哇~~学习学习
mumu_java 2009-04-15
  • 打赏
  • 举报
回复
只要有人发布消息就可以看作是immediately available message,发布的消息是可以被多次订阅的。
http://blog.csdn.net/blade_sea/archive/2004/12/07/207393.aspx
艾德 2009-04-15
  • 打赏
  • 举报
回复
补充一下,只有AQ 的topic有这个问题,对于queue,无论receiveNoWait还是receive(...)都是正常的
Dantin 2009-04-15
  • 打赏
  • 举报
回复
~学习学习
艾德 2009-04-15
  • 打赏
  • 举报
回复
哎,可是为什么用receiveNoWait会拿不到呢?
不知道这个API是不是只从buffer里拿呢。冒似jboss的jms就有这样的问题
https://jira.jboss.org/jira/browse/JBMESSAGING-1140

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧