Topic: 不用MDB如何获取集群上分布式消息队列

  Print this page

1.不用MDB如何获取集群上分布式消息队列 Copy to clipboard
Posted by: sljsuper
Posted on: 2007-05-23 10:43

不用MDB,使用注册侦听的方法如何获取分布式消息队列的消息?
常规的注册方法只能固定获取一个物理队列的消息,如何把所有的物理队列上的消息处一次接收呢,望指教。使用过多线程的方法,感觉不太稳定。

2.Re:不用MDB如何获取集群上分布式消息队列 [Re: sljsuper] Copy to clipboard
Posted by: snowbug
Posted on: 2007-05-24 05:42

可否说得详细些,为什么不用 MDB,具体的要求是什么,什么环境,等等。

3.Re:不用MDB如何获取集群上分布式消息队列 [Re: sljsuper] Copy to clipboard
Posted by: sljsuper
Posted on: 2007-05-24 09:52

侦听队列的环境是weblogic9.2下,集群、分布式队列。分布式队列上建了8个存储位置。目的是想通过DQ来获取所有物理队列的消息,使用注册侦听的方法每次通过DQ注册,只连到一个物理队列,其他的队列消息取不到,使用多线程也不能保证每个物理队列都能连到。用MDB可以,但是基于我们项目的原因不适合,而且MDB要配置jar.xml文件打包,这样就导致如果我有10几个环境要使用这个项目因为这个XML文件就需要打10几个版本,这样是否太浪费了。

4.Re:不用MDB如何获取集群上分布式消息队列 [Re: sljsuper] Copy to clipboard
Posted by: snowbug
Posted on: 2007-05-25 07:18

不是很确定为什么你需要获取所有物理队列的消息。使用 DQ 的目的应该是平衡负载吧,那么每个 Queue Receiver 的代码都应该是一样的,换句话说,不管那个物理队列受到了消息,处理的代码都应该是相同的。

5.Re:不用MDB如何获取集群上分布式消息队列 [Re: sljsuper] Copy to clipboard
Posted by: sljsuper
Posted on: 2007-05-25 10:08

在表面上我们是看不见物理队列的JNID的,只能看见DQ。而通过DQ来查找到话只能绑定一个物理地址。这就是问题所在。在bea的文档看见queue = myQueueSession.createQueue("myModule!myServer/myQueue"); 这个方法,试了没用,因为我的server是集群,物理队列也根本不知道。就是不明白发送的时候怎么可以通过一个DQ,而接收的时候却不行。

6.Re:不用MDB如何获取集群上分布式消息队列 [Re: sljsuper] Copy to clipboard
Posted by: snowbug
Posted on: 2007-05-26 15:30

我知道你的意思了。你用的是 UDQ 吧。 这个应该是 bea 特有的问题。我不知道怎么解决。老实说,我很奇怪 bea 的文档居然没有提到这个问题。如果不能注册所有的物理队列,就会丢失消息,那么这个 DQ 还有什么用呢。

我好像看到你是可以直接在 jndi 里拿到单个的物理队列的。

7.Re:不用MDB如何获取集群上分布式消息队列 [Re: sljsuper] Copy to clipboard
Posted by: sljsuper
Posted on: 2007-05-27 09:11

问题已解决
JMSModuleHelper.uddMemberJNDIName(jmsservername,dqname);
以此方法获取物理队列JNDI。以前用过,觉得这个方法很奇怪,不用上下文环境的就可以直接用,只是作为 一个字符串翻译的工作。


   Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent
Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1
客服电话 18559299278    客服信箱 714923@qq.com    客服QQ 714923