2个不同的MDB监听JBoss 4.2.3 上的同一个Topic (集成JBoss Messaging 1.4.2 SP1),Topic上的消息是BytesMessage。发一个消息到Topic上,2个MDB都会收到这个消息。

但奇怪的是只有一个MDB能正常读取BytesMesage,另一个MDB读取BytesMessage.readBytes()始终返回-1

同样的测试程序,在WebLogic上就正常。

JBoss怎么会发送同一个BytesMessage对象到所有的subscriber?有人解决过同样的问题吗?


google了很长时间,也尝试了很多方法,似乎没什么好的办法。一种方法是避免使用BytesMessage, 还有一种方法就是使用反射,直接复制JBoss的BytesMessage实现。

public void onMessage(Message msg) {

  BytesMessageProxy msgProxy 
= (BytesMessageProxy)msg;
        
        Class clazz 
= MessageProxy.class;
        Field field 
= clazz.getDeclaredField("message");
        field.setAccessible(
true);
        JBossMessage rawMsg 
= (JBossMessage)field.get(msgProxy);
        
        BytesMessage newMsg 
= (BytesMessage)rawMsg.doCopy();

       
// read data from newMsg
}

只有注册用户登录后才能发表评论。


网站导航:
 

posts - 5, comments - 25, trackbacks - 0, articles - 1

Copyright © 天快黑了