JMS生产者和消费者

生产者

import javax.jms.BytesMessage;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.DeliveryMode;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MapMessage;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.StreamMessage;
import javax.jms.TextMessage;
import javax.jms.ObjectMessage;
import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;


/**
 * 消息的生产者
 * @author wzl
 *
 */
public class JMSProducer {
	
    //默认连接用户名
    private static final String USERNAME = ActiveMQConnection.DEFAULT_USER;
    //默认连接密码
    private static final String PASSWORD = ActiveMQConnection.DEFAULT_PASSWORD;
    //默认连接地址
//    private static final String BROKEURL = ActiveMQConnection.DEFAULT_BROKER_URL;
    private static final String BROKEURL = "failover://tcp://118.178.187.96:61616";
    
    public static void run() throws Exception {
    	//连接工厂
        ConnectionFactory connectionFactory = null;
        //连接
        Connection connection = null;
        //会话 接受或者发送消息的线程
        Session session = null;
        //消息生产者
        MessageProducer messageProducer = null;
        //消息的目的地
        Destination destination;
        
        //实例化连接工厂
        connectionFactory = new ActiveMQConnectionFactory(JMSProducer.USERNAME, JMSProducer.PASSWORD, JMSProducer.BROKEURL);
        
        try {
            //通过连接工厂获取连接
            connection = connectionFactory.createConnection();
            //启动连接
            connection.start();
            //创建session
            session = connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);
            //消息的目的地
            destination = session.createQueue("HelloWorld");
            //创建消息生产者
            messageProducer = session.createProducer(destination);
            //持久化模式
            messageProducer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);//不持久化
            
            sendTextMessage(session, messageProducer); //发送文本消息
            sendMapMessage(session, messageProducer); //发送流消息
            sendStreamMessage(session, messageProducer);//发送键值对消息
            sendBytesMessage(session, messageProducer);//发送字节消息
            sendObjectMessage(session, messageProducer);//发送对象消息
            
            session.commit();

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
        	try {
	        	if(null != session) {
	        		session.close();
	        	}
	        	if(null != messageProducer) {
	    			messageProducer.close();
	        	}
	        	if(null != connection) {
					connection.close();
	        	}
        	} catch (JMSException e) {
				e.printStackTrace();
			}
        }
    }
    
    /**
     * 发送消息
     * @param session
     * @param messageProducer  消息生产者
     * @throws Exception
     */
    public static void sendTextMessage(Session session,MessageProducer messageProducer) throws Exception{
	    //创建一条文本消息 
	    TextMessage message = session.createTextMessage("这是一条文本消息123abc");
	    //通过消息生产者发出消息 
	    messageProducer.send(message);
    }
    
    /**
     * 发送键值对消息
     * @param session
     * @param messageProducer  消息生产者
     * @throws Exception
     */
    public static void sendMapMessage(Session session,MessageProducer messageProducer) throws Exception{
        //创建消息 
    	MapMessage mapMessage = session.createMapMessage();
    	mapMessage.setLong("age",32L);
    	mapMessage.setDouble("sarray",5867.15D);
    	mapMessage.setString("username","键值对消息");
    	
        //通过消息生产者发出消息 
        messageProducer.send(mapMessage);

    }
    
    /**
     * 发送流消息
     * @param session
     * @param messageProducer  消息生产者
     * @throws Exception
     */
    public static void sendStreamMessage(Session session,MessageProducer messageProducer) throws Exception{
    	StreamMessage streamMessage = session.createStreamMessage();
    	streamMessage.writeString("这是streamMessage流消息");
    	streamMessage.writeLong(55);
    	
    	//通过消息生产者发出消息 
    	messageProducer.send(streamMessage);
    }
    
    /**
     * 发送字节消息
     * @param session
     * @param messageProducer  消息生产者
     * @throws Exception
     */
    public static void sendBytesMessage(Session session,MessageProducer messageProducer) throws Exception{
    	String s = "这是BytesMessage字节消息";
    	BytesMessage bytesMessage = session.createBytesMessage();
    	bytesMessage.writeBytes(s.getBytes());
    	
    	//通过消息生产者发出消息 
    	messageProducer.send(bytesMessage);
    }
    
    /**
     * 发送对象消息
     * @param session
     * @param messageProducer  消息生产者
     * @throws Exception
     */
    public static void sendObjectMessage(Session session,MessageProducer messageProducer) throws Exception {
    	User user = new User("1001","张三");//User对象必须实现Serializable接口
    	ObjectMessage objectMessage = session.createObjectMessage();
    	objectMessage.setObject(user);
    	
    	//通过消息生产者发出消息 
    	messageProducer.send(objectMessage);
    }
    
    public static void main(String[] args) throws Exception {
    	JMSProducer.run();
    }
    
}

消费者

import javax.jms.BytesMessage;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MapMessage;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.ObjectMessage;
import javax.jms.Session;
import javax.jms.StreamMessage;
import javax.jms.TextMessage;
import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;

/**
 * 消息的消费者
 * @author wzl
 *
 */
public class JMSConsumer {
	
    private static final String USERNAME = ActiveMQConnection.DEFAULT_USER;//默认连接用户名
    private static final String PASSWORD = ActiveMQConnection.DEFAULT_PASSWORD;//默认连接密码
//    private static final String BROKEURL = ActiveMQConnection.DEFAULT_BROKER_URL;//默认连接地址
    private static final String BROKEURL = "failover://tcp://118.178.187.96:61616";//默认连接地址
    
    
    public static void run() throws Exception {
    	
    	//连接工厂
    	ConnectionFactory connectionFactory = null;
    	//连接
        Connection connection = null;
        //会话 接受或者发送消息的线程
        Session session = null;
        Destination destination;//消息的目的地
        MessageConsumer messageConsumer = null;//消息的消费者
        
        //实例化连接工厂
        connectionFactory = new ActiveMQConnectionFactory(JMSConsumer.USERNAME, JMSConsumer.PASSWORD, JMSConsumer.BROKEURL);
        try {
            //通过连接工厂获取连接
            connection = connectionFactory.createConnection();
            //启动连接
            connection.start();
            //创建session
            session = connection.createSession(Boolean.FALSE, Session.AUTO_ACKNOWLEDGE);
            //消息的来源地
            destination = session.createQueue("HelloWorld");
            //创建消息消费者
            messageConsumer = session.createConsumer(destination);
            
            while (true) {
            	Message message = messageConsumer.receive(100*1000);
            	if(null == message) {
            		break;
            	}
            	
            	if(message instanceof TextMessage) {
            		System.out.println("收到TextMessage消息:" + ((TextMessage) message).getText());
            	} else if(message instanceof ObjectMessage) {
            		System.out.println("收到对象(User)消息:" + ((User) ((ObjectMessage) message).getObject()).getName());
            	} else if(message instanceof MapMessage) {
            		System.out.println("收到MapMessage消息:" + ((MapMessage) message).getLong("age"));
            	} else if(message instanceof StreamMessage) {
            		System.out.println("收到StreamMessage消息:" + ((StreamMessage) message).readString());
            	} else if(message instanceof BytesMessage) {
            		byte[] b = new byte[1024];
            		int len = -1;
            		while((len = ((BytesMessage)message).readBytes(b)) != -1) {
            			System.out.println("收到BytesMessage消息:" + new String(b , 0 , len));
            		}
            	}
            }
            //确认消息
            session.commit();
        } catch (JMSException e) {
            e.printStackTrace();
        } finally {
        	try {
	        	if(null != session) {
					session.close();
	        	}
	        	if(null != messageConsumer) {
					messageConsumer.close();
	        	}
	        	if(null != connection) {
					connection.close();
	        	}
        	} catch (JMSException e) {
				e.printStackTrace();
			}
        }
    }
    
    public static void main(String[] args) throws Exception {
    	JMSConsumer.run();
    }
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值