谁能解决多个MDB读取JBoss Topic上的BytesMessage出现的奇怪问题

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
}

你可能感兴趣的:(谁能解决多个MDB读取JBoss Topic上的BytesMessage出现的奇怪问题)