誰(shuí)能解決多個(gè)MDB讀取JBoss Topic上的BytesMessage出現(xiàn)的奇怪問(wèn)題
Posted on 2010-08-24 15:54 天快黑了 閱讀(1326) 評(píng)論(0) 編輯 收藏 所屬分類: Question2個(gè)不同的MDB監(jiān)聽(tīng)JBoss 4.2.3 上的同一個(gè)Topic (集成JBoss Messaging 1.4.2 SP1),Topic上的消息是BytesMessage。發(fā)一個(gè)消息到Topic上,2個(gè)MDB都會(huì)收到這個(gè)消息。
但奇怪的是只有一個(gè)MDB能正常讀取BytesMesage,另一個(gè)MDB讀取BytesMessage.readBytes()始終返回-1
同樣的測(cè)試程序,在WebLogic上就正常。
JBoss怎么會(huì)發(fā)送同一個(gè)BytesMessage對(duì)象到所有的subscriber?有人解決過(guò)同樣的問(wèn)題嗎?
google了很長(zhǎng)時(shí)間,也嘗試了很多方法,似乎沒(méi)什么好的辦法。一種方法是避免使用BytesMessage, 還有一種方法就是使用反射,直接復(fù)制JBoss的BytesMessage實(shí)現(xiàn)。
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
}
但奇怪的是只有一個(gè)MDB能正常讀取BytesMesage,另一個(gè)MDB讀取BytesMessage.readBytes()始終返回-1
同樣的測(cè)試程序,在WebLogic上就正常。
JBoss怎么會(huì)發(fā)送同一個(gè)BytesMessage對(duì)象到所有的subscriber?有人解決過(guò)同樣的問(wèn)題嗎?
google了很長(zhǎng)時(shí)間,也嘗試了很多方法,似乎沒(méi)什么好的辦法。一種方法是避免使用BytesMessage, 還有一種方法就是使用反射,直接復(fù)制JBoss的BytesMessage實(shí)現(xiàn)。












