• 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();
            
            
            
            
        }
        
    
    }
  • 相关阅读:
    MySQL客户端管理
    Windows10安装Pytorch环境要点
    使用ssh加密github通信
    JVM 对象状态判断01
    并发之AbstractQueuedLongSynchronize----AQS
    关于CountDownLatch控制线程的执行顺序
    关于线程执行顺序的问题
    并发之Striped64(l累加器)
    并发之线程以及线程的中断状态
    1 JPA入门----项目搭建以及CRUD
  • 原文地址:https://www.cnblogs.com/hansongjiang/p/4078671.html
Copyright © 2020-2023  润新知