消息接收的多线程实现

package duoxianchengtest;

import java.util.Properties;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.ObjectMessage;
import javax.jms.Queue;
import javax.jms.QueueConnection;
import javax.jms.QueueConnectionFactory;
import javax.jms.QueueReceiver;
import javax.jms.QueueSession;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
/**
 *
 * @author Owner
 *
 *
 */

public class Receiver1
{

   QueueReceiver qrec1=null;
   QueueSession qs =null;
   QueueConnection qc=null;
   /**
    *
    * @throws NamingException
    * @throws JMSException
    * 构造函数初始化
    */
public Receiver1() throws NamingException, JMSException{
//  ictx = new InitialContext(JMSConstant.getProp());
  Properties pr =new Properties();
  pr.put("82.0.176.214","16400");
  Context ictx = new InitialContext(pr);
     Queue queue = (Queue) ictx.lookup("queue");
     QueueConnectionFactory qcf = (QueueConnectionFactory) ictx.lookup("qcf");
     ictx.close();
     qc = qcf.createQueueConnection("user1","user1");
     qs = qc.createQueueSession(false,Session.AUTO_ACKNOWLEDGE);
     qrec1 = qs.createReceiver(queue,"sessionID=2");
}
/**
 *
 * @author Owner
 *  一个内部类继承Thread实现run()方法,在run()方法设置消息监听器.
 */
  class Brun extends Thread{
  public void run(){
   try{
    qrec1.setMessageListener(new MsgListener1());
    qc.start();
       }catch(JMSException e){}
         }
       }
  /**
   * 创建线程组
   *
   */
  public void run_thread() {
  Brun[] tt = new Brun[3000];
  for (int i = 0; i < tt.length; i++) {
   tt[i] = new Brun();
   tt[i].start();

   // System.out.println("go");
  }

  // for (int i = 0; i < tt.length; i++) {
  // System.out.println("go1");
  // try {
  // tt[i].join();
  //
  // } catch (InterruptedException je) {}
  //   
  //   
  // System.out.println("go2");
  //  }
 }
     
 
 void close() throws JMSException {
   qrec1.close();
  qs.close();
  qc.close();
 }
 /**
  *
  * @param args
  * @throws Exception
  */
  public static void main(String[] args) throws Exception
  {
//  long time1= System.currentTimeMillis();
   
    System.out.println("Requests to receive messages...");

      Receiver1 rc=new Receiver1();
      rc.run_thread();
      System.in .read();
      rc.close();
      System.out.println();
      System.out.println( " messages received.");
//    long time2 = System.currentTimeMillis();
//    System.out.println("time=:"+(time2-time1));
   
  }
}

本来也想做个join()的.但是只是设置消息监听器完毕.不行呀..看来要关闭连接对象,需要被动的接收消息,,然后根据消息内容来处理了关闭了?还有一个问题是.线程是否稳定.在ejb里消息驱动bean是不支持多线程发送的.一切都还需要测试.

你可能感兴趣的:(多线程,thread,bean,jms,ejb)