activemq p2p方式

package ch02.chat;



import java.io.Serializable;

import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.MessageListener;
import javax.jms.MessageProducer;
import javax.jms.ObjectMessage;
import javax.jms.Queue;
import javax.jms.QueueSession;
import javax.jms.Session;
/*本工具封装了*/


import javax.jms.TextMessage;
import javax.jms.Topic;
import javax.jms.TopicConnection;
import javax.jms.TopicConnectionFactory;
import javax.jms.TopicPublisher;
import javax.jms.TopicSession;
import javax.jms.TopicSubscriber;

import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;

public class JMSQueue {
    TopicConnectionFactory connectionFactory;
    // Connection :JMS 客户端到JMS Provider 的连接
    TopicConnection connection = null;
    //用来发布的会话
    
    //TopicSession proSession = null;
    //2一个订阅会话
   //TopicSession conSession = null;
          Session  session=null;
    
    //主题发布者
    MessageProducer producer=null;
    //主题
    MessageConsumer consumer=null;
    
    
    // Destination :消息的目的地;消息发送给谁.
    Destination destination=null;
    // MessageProducer:消息发送者
    
    //默认构造函数,默认的连接activemq,可以写多个构造函数
    public JMSQueue() 
    { 
        connectionFactory =  new ActiveMQConnectionFactory(
                ActiveMQConnection.DEFAULT_USER,
                ActiveMQConnection.DEFAULT_PASSWORD,
                "tcp://localhost:61616");
        try {
            connection= connectionFactory.createTopicConnection();
        } catch (JMSException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        try {
            connection.start();
        } catch (JMSException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
    }
    public JMSQueue(String user,String name) 
    { 
        connectionFactory =  new ActiveMQConnectionFactory(
                user,
                name,
                "tcp://localhost:61616");
        try {
            connection= connectionFactory.createTopicConnection();
        } catch (JMSException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        try {
            connection.start();
        } catch (JMSException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
    }
    
    
    
    
    
    //设计session类型
       public void setSession() throws JMSException
       {
           session= connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
          
       }
         //设置为原子类型
       public void setAtomicSession() throws JMSException
       {
           session= connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
           
       }
    
    //此处先固定消息为String类型
    public void writeMessage(String t,String message,int priority )
    {
        try {
            
            producer=session.createProducer(session.createQueue(t));
            
            //使用message构造TextMessage 
            TextMessage text=session.createTextMessage();
            text.setJMSPriority(priority);
            text.setText(message);
            producer.send(text);
            
            
            
            
        } catch (JMSException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        //创建发布会话应该是可以配置的,此处先固定
        
        
    }
    
    public void writeMessage(String t,Object o)
    {
        try {

            
            producer=session.createProducer(session.createQueue(t));
            
            //使用message构造TextMessage 
            ObjectMessage text=session.createObjectMessage();
            text.setObject((Serializable) o);
            producer.send(text);
            
            
            
            
        } catch (JMSException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        //创建发布会话应该是可以配置的,此处先固定
        
        
    }
        
    //使用某个Message监听器来监听某个Topic
    public void receiveMsg(String c,MessageListener ml)
    {
        try {
        
            Queue t=session.createQueue(c);
            consumer=session.createConsumer(t);
            //设置过来的监视器
            consumer.setMessageListener(ml);
            
        } catch (JMSException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
        
        
        
    }
    public Message receiveMsg(String c)
    {
        try {
            
            
            consumer=session.createConsumer(session.createQueue(c));
            //设置过来的监视器
            Message message=consumer.receive();
            return message;
            
        } catch (JMSException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return null;
    }
    //同步接收信息
    
    public void commit() throws JMSException
    {
        session.commit();
    }
    public void rollback() throws JMSException
    {
        session.rollback();
    }
    public void close() throws JMSException 
    {
        if(connection!=null) connection.close();
        if(session!=null) session.close();
        if(producer!=null) session.close();
        if(consumer!=null) consumer.close();
        
        
        
        
    }
    

}

 

posted @ 2014-11-06 14:12  hansongjiang8  阅读(293)  评论(0编辑  收藏  举报