JMSが初めてです。私の質問が意味をなさない場合は、私を修正してください。 オブジェクトを送信するためにjmsを使用するプログラムを記述しています。しかし私のプログラムでは、私が時々送るオブジェクトの数は変化しています。だから私は受信側でカウントダウンを使用することはできません。また、私は多くを検索しましたが、JMSキューの長さを知る方法を見つけることができませんでした。 私はどのように私はすべてのオブジェクトが消費されるまで私のキューを読むことができます方法を教えてください。以下 カウントダウンなしでJMS Recieverを書くことは可能ですか?
は私のコードで、私はこれを行うには直接的な方法はありません知っているとして、それは限りキューpublic class QReciever{
private static QueueConnection qConn;
private static QueueSession qSession;
private static Queue que;
private static BuildInfo recieveBuildInfo;
///INner Class
public static class ExListener implements MessageListener{
public void onMessage(Message msg){
System.out.println("IN side onMessage method in Inner class");
try {
ObjectMessage objMsg = (ObjectMessage) msg;
setRecieveBuildInfo((BuildInfo)objMsg.getObject());
System.out.println("############################ Inside the Inner class\n\t Build No is: "+getRecieveBuildInfo().getBuildNo());
write2Db(getRecieveBuildInfo());
} catch (JMSException e) {
e.printStackTrace();
}
}
}
public static BuildInfo getRecieveBuildInfo() {
return recieveBuildInfo;
}
public static void setRecieveBuildInfo(BuildInfo recieveBuildInfo) {
QReciever.recieveBuildInfo = recieveBuildInfo;
}
public static void recieveQueue() throws Exception{
System.out.println("############################Inside recieveQueue"); //####################################################################
//Jndi lookup
Properties props = ProptManager.getProperties();
InitialContext initCtx = new InitialContext(props);
Object temp = initCtx.lookup("XAConnectionFactory");
QueueConnectionFactory qcf = (QueueConnectionFactory) temp;
qConn = qcf.createQueueConnection();
qConn.start();
que = (Queue) initCtx.lookup("queue/MyQueue");
qSession = qConn.createQueueSession(false, qSession.AUTO_ACKNOWLEDGE);
QueueReceiver qReciever = qSession.createReceiver(que);
qReciever.setMessageListener(new ExListener());
qReciever.close();
System.out.println("qReciever Closed");
qSession.close();
System.out.println("qSession Closed");
qConn.close();
System.out.println("qConn Closed");
//System.exit(1);
}
public static void write2Db(BuildInfo bInfo){
System.out.println("############################ Inside write2Db ");
//writing to the database
}catch(Exception e){
System.out.println("Error: Updating Database, The record which the Build No is: "+bInfo.getBuildNo()+" may already inserted" + e.getMessage());
}
}
QueueRecieverの部分を に置き換えました。{ MessageConsumer consumer = qSession.createConsumer(que); consumer.setMessageListener(新しいExListener()); 今、メッセージを消費しますが、まだすべてのキュー要素が消費されているかどうかを直接知ることはできません。 plz someone me me } – Isuru