微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从IBM MQ异步读取消息

如何解决从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.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?