如何解决从IBM MQ异步读取消息
我想异步地从IBM MQ中读取多个消息。我只是在使用像下面这样的MessageDrivenBean配置。
import java.io.IOException;
import java.util.ArrayList;
import javax.ejb.ActivationConfigProperty;
import javax.ejb.Asynchronous;
import javax.ejb.EJBException;
import javax.ejb.MessageDriven;
import javax.ejb.MessageDrivenBean;
import javax.ejb.MessageDrivenContext;
import javax.ejb.Stateless;
import javax.jms.*;
import com.tlr.searchextract.messages.MessageHandler;
@MessageDriven(
name = "MessageTrigger_ABean",activationConfig = {
@ActivationConfigProperty( propertyName = "destinationType",propertyValue = "javax.jms.Queue"),@ActivationConfigProperty( propertyName = "destination",propertyValue ="COMSERV.SRCHEXT.EVENTS.PUBLISH.QA.Q01"),@ActivationConfigProperty( propertyName = "hostname",propertyValue ="reese"),@ActivationConfigProperty( propertyName = "channel",propertyValue ="CLIENTCONNECTION"),@ActivationConfigProperty( propertyName = "port",propertyValue ="1414")
}
)
/**
* Bean implementation class for Enterprise Bean: MessageTrigger_A
*/
public class MessageTrigger_ABean implements MessageListener,MessageDrivenBean
{
/**
*
*/
//private static final long serialVersionUID = 1L;
private MessageDrivenContext fMessageDrivenCtx;
public javax.ejb.MessageDrivenContext getMessageDrivenContext() {
return fMessageDrivenCtx;
}
@Override
public void ejbRemove() throws EJBException {
// Todo Auto-generated method stub
}
@Override
public void setMessageDrivenContext(MessageDrivenContext ctx) throws EJBException {
fMessageDrivenCtx = ctx;
}
/**
* onMessage
*/
public void onMessage(Message msg) {
String messageText = "";
System.out.println("inside onMessage of MessageTrigger_ABean ");
try {
System.out.println("check if msg instance of bytes");
if (msg instanceof BytesMessage) {
int length;
byte[] buf2 = new byte[100];
StringBuffer sb = new StringBuffer();
BytesMessage bytesMessage = ((BytesMessage) msg);
do {
length = bytesMessage.readBytes(buf2);
if (length != -1) {
for (int i = 0; i < length; i++) {
//System.out.print((char) buf2[i]);
sb.append((char) buf2[i]);
}
}
}
while (length >= 100);
messageText = sb.toString();
}
else if (msg instanceof TextMessage) {
System.out.println("check if msg instance of text");
messageText = ((TextMessage) msg).getText();
}
int angleLeft = 0;
angleLeft = messageText.indexOf("<");
messageText = messageText.substring(angleLeft,messageText.length());
MessageHandler mh = new MessageHandler();
System.out.println("messagehandler java file:"+messageText);
mh.processMessages(messageText);
}
catch (Exception e) {
System.out.println("JMSException: " + e.getMessage());
}
}
}
即使消息存在于队列中,也不会调用onMessage方法。请告诉我我在哪里做错了。 我在ejb jar下使用,由于在这里使用批注,因此ejb-jar.xml中没有任何配置。 javax.ejb-api-3.2.jar
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。