从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 (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...