JMS

来源:互联网 发布:淘宝修改昵称 编辑:程序博客网 时间:2024/04/29 02:31

一、Weblogic中配置JMS

    JMS服务器的配置:服务--消息传送--JMS服务器--新建--(持久性存储:[新建存储--类型:文件存储--确定] 这些步骤可选)--下一步--目标:                              AdminServer--完成 (PocJMSServer)

         JMS模块配置:新建--下一步--目标:AdminServer--下一步--完成(SystemModule-0)

         连接工厂配置:点击SystemModule-0--新建--下一步--完成

     队列配置:点击SystemModule-0--新建--下一步--新建子部署--目标:PocJMSServer--完成  

二、JMS发送端方法(主要参考网上资料) 

   publicvoid sendMessages(String data, String sqdzj, String jgdm) {
        InitialContext ctx =null;
        QueueConnectionFactoryqcf = null;
        QueueConnection qc =null;
        QueueSession qsess =null;
        Queue q = null;
        QueueSender qsndr =null;
        TextMessage message =null;
        String QCF_NAME ="VisaConnectionFaction";//连接工厂的jndi名称
        String QUEUE_NAME = "InOutQueueData";//
队列jndi名称
        Hashtable properties =new Hashtable();

       properties.put(Context.INITIAL_CONTEXT_FACTORY,
                     "weblogic.jndi.WLInitialContextFactory");
       properties.put(Context.PROVIDER_URL, "t3://192.168.0.11:7001");
       properties.put(Context.SECURITY_PRINCIPAL, "weblogic");//域的用户名
       properties.put(Context.SECURITY_CREDENTIALS, "12345678");//
域的登录密码
        try {

            ctx = newInitialContext(properties);
            // createQueueConnectionFactory
            qcf =(QueueConnectionFactory)ctx.lookup(QCF_NAME);
            // createQueueConnection
            qc =qcf.createQueueConnection();
            // createQueueSession
            qsess =qc.createQueueSession(false, 0);
            // lookupQueue
            q =(Queue)ctx.lookup(QUEUE_NAME);
            // createQueueSender
            qsndr =qsess.createSender(q);
            // createTextMessage
            message =qsess.createTextMessage();
            // setmessage text in TextMessage
           message.setText(data);//消息内容
            if("14".equals(jgdm.substring(0, 2))) {

               message.setStringProperty("orgcode", "140000");//设置消息属性
               message.setStringProperty("sqdzj", sqdzj);

               
            } else if("09".equals(jgdm.substring(0, 2))) {
               message.setStringProperty("orgcode", "090000");
               message.setStringProperty("sqdzj", sqdzj);
            }else{
               
            }
            qsndr.send(message);
            message =null;
           qsndr.close();
            qsndr =null;
            q = null;
           qsess.close();
            qsess =null;
           qc.close();
            qc = null;
            qcf =null;
            ctx =null;
           System.out.println("Cleaned up and done.SQDATA");


        } catch (Exception ne) {


           ne.printStackTrace(System.err);
           System.exit(0);
        }
        //       return s;
    }

 

三、接收消息

publicclass QueueReceiveSQData implements MessageListener {
    public final static StringJNDI_FACTORY="weblogic.jndi.WLInitialContextFactory";//
与发送端应用配置一致
    
    public final static StringPROVIDER_URL="t3://192.168.0.11:7001";//
发送端URL
    
    public final static StringJMS_FACTORY="VisaConnectionFaction";//
与发送端应用配置一致
    
    public final static String QUEUEIO="InOutQueueData";//
与发送端应用配置一致
    
    private static QueueConnectionFactory qconFactory;
    
    private static QueueConnection qcon;
    
    private static QueueSession qsession;
    
    private static QueueReceiver qreceiver;
    
    private  static Queue queue;
    
    /**
    *
入口方法
    */
    public static  void receiveMsg() throws Exception {
            InitialContext ic = getInitialContext();
            QueueReceiveSQData q = newQueueReceiveSQData();
            q.inits(ic, QUEUEIO);
    //              //
当收到"quit"信息后,停止接收
//                 synchronized(q) {
//                         while (true) {
//                                 try {
//                                         q.wait();
//                                 } catch (InterruptedException ie){
//    
//                                 }
//                         }
//                  }
    //              qr.close();
    }
    
    /**
     * 1

     *
通过JNDI查找ConnectionFactory
     *
通过JNDI查找一个或多个Destination 
     */
    private static InitialContext getInitialContext() throwsNamingException {
            Hashtable env = new Hashtable();
            env.put(Context.INITIAL_CONTEXT_FACTORY,JNDI_FACTORY);
            env.put(Context.PROVIDER_URL,PROVIDER_URL);
            return new InitialContext(env);
    }
    
    
    public void inits(Context ctx, String queueName)
            throws NamingException, JMSException{
            qconFactory =(QueueConnectionFactory) ctx.lookup(JMS_FACTORY);
            qcon =qconFactory.createQueueConnection();
            qsession =qcon.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
            queue = (Queue)ctx.lookup(queueName);
            qreceiver =qsession.createReceiver(queue);
            qreceiver.setMessageListener(newQueueReceiveSQData());
            qcon.start();
            System.out.println("SQDATA");

            
    }


    public void onMessage(Message msg){
            
            try {
                    StringmsgText;
                if ((msg instanceofjavax.jms.TextMessage)) {
                   System.out.println("DATA:"+ ((TextMessage)msg).getText());
                   System.out.println("orgcode:"+(msg.getStringProperty("orgcode")));
                       msgText = ((TextMessage)msg).getText(); 
                    

                    }
    //                     if (msg instanceof TextMessage) {
    //                             msgText =((TextMessage)msg).getText();
    //                     } else {
    //                             msgText = msg.toString();
    //                     }
    //                     System.out.println("Message Received: "+ msgText );
    //                     //
当收到"quit"信息后,停止接收
    //                     if (msgText.equalsIgnoreCase("quit")) {
    //                             synchronized(this) {
    //                                     quit =true;
    //                                    this.notifyAll();
    //                             }
    //                     }
            } catch (JMSException jmse) {
                   jmse.printStackTrace();
            }
    }
    
    /**
     * 4
、消息对象关闭
     */
    public static void close()throws JMSException {
        if(qreceiver!=null){
            qreceiver.close();
            qsession.close();
            qcon.close();
        }
    }

 

四、监听类

publicclass ContextListener implements ServletContextListener {
    public ContextListener() {
        super();
    }


    public void contextInitialized(ServletContextEventservletContextEvent) {
        System.out.println("====
接收JMS信息程序启动====="); 
               try {  
                 QueueReceive.receiveMsg();  
                 QueueReceiveSQ.receiveMsg();
                  QueueReceiveSQData.receiveMsg();
               } catch (Exception e) { 
                  e.printStackTrace();  
               }  
    }


    public void contextDestroyed(ServletContextEventservletContextEvent) {
        System.out.println("====
接收JMS信息程序关闭=====");
        try {
          QueueReceive.close();
           QueueReceiveSQ.close();
           QueueReceiveSQData.close();
        } catch (JMSException e) {
        }
    }
}

五、web.xml文件配置监听

<listener>
       <listener-class>com.mgear.services.datamethod.ContextListener</listener-class>
  </listener>

六、部署项目后,可以自动监听到队列的消息。

 


0 0
原创粉丝点击