activemq消息模式-連載2

上一章將了activemq環境搭建activemq單機環境搭建-連載1

1.Queue模式:

點對點通信,每個消息只有一個消費者,消息保證送達,離線消費者可以在下次上線後收到之前積壓的消息。

以下是消費者代碼:

package org.activemqstudy.queue;

import javax.jms.Connection;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.MessageListener;
import javax.jms.Queue;
import javax.jms.Session;
import javax.jms.TextMessage;

import org.activemqstudy.util.ConnectionUtil;
import org.activemqstudy.util.Constanst;

/**
 * 消費者
 * 
 * @author bruce2018 [微信公衆號:程序江湖] 
 * csdn:https://blog.csdn.net/zpl123456
 * jianshu:https://www.jianshu.com/u/effeedbfe8d7
 * juejin:https://juejin.im/post/5c8b0cfce51d4553de1fa545
 */
public class AppConsumer {

	public static void main(String[] args) {
		consumer();
	}

	/**
	 * 生產者
	 */
	public static void consumer() {
		Connection connection = null;
		Session session = null;
		MessageConsumer createConsumer = null;
		try {
			connection = ConnectionUtil.getInstance().createConnection();
			connection.start();
			session = connection.createSession(false,
					Session.CLIENT_ACKNOWLEDGE);
			Queue queue = session.createQueue(Constanst.QUEUE);
			createConsumer = session.createConsumer(queue);
			createConsumer.setMessageListener(new ConsumerListener());
		} catch (JMSException e) {
			e.printStackTrace();
		} finally {
			if (createConsumer != null) {
				try {
					createConsumer.close();
				} catch (JMSException e) {
					e.printStackTrace();
				}
			}
			ConnectionUtil.getInstance().close(session, connection);
		}
	}

	/**
	 * 
	 * @author bruce2018
	 *
	 */
	private static class ConsumerListener implements MessageListener {
		@Override
		public void onMessage(Message message) {
			if (message instanceof TextMessage) {
				TextMessage textMessage = (TextMessage) message;
				try {
					System.out.println(textMessage.getText());
					textMessage.acknowledge();
				} catch (JMSException e) {
					e.printStackTrace();
				}
			}
		}
	}
}

以下是生產者代碼:

package org.activemqstudy.queue;

import javax.jms.Connection;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage;

import org.activemqstudy.util.ConnectionUtil;
import org.activemqstudy.util.Constanst;

/**
 * 生產者
 * @author bruce2018 [微信公衆號:程序江湖]
 * csdn:https://blog.csdn.net/zpl123456
 * jianshu:https://www.jianshu.com/u/effeedbfe8d7
 * juejin:https://juejin.im/post/5c8b0cfce51d4553de1fa545
 */
public class AppQueueProduct 
{
    public static void main( String[] args )
    {
    	product();
    }
    
    public static void product(){
    	Connection connection = null;//連接
        Session session = null;//發送或者接受發送消息的線程
        MessageProducer createProducer = null;//消息生產者
        try {
        	//1.創建工廠鏈接對象,指定Ip和端口號
			connection = ConnectionUtil.getInstance().createConnection();
			//開啓連接
			connection.start();
			//使用連接創建回話session對象
//		    static final int AUTO_ACKNOWLEDGE = 1;  自動確認模式,不需要客戶端進行確認
//		    static final int CLIENT_ACKNOWLEDGE = 2; 客戶端進行確認
//		    static final int DUPS_OK_ACKNOWLEDGE = 3; 允許重複消息
			session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE);//開始事務  也可以不用開啓事務
			//使用回話對象創建目標對象,包含queue或者topic
			Destination de = session.createQueue(Constanst.QUEUE);
			
			//使用回話對象創建生產者對象
			createProducer = session.createProducer(de);
			TextMessage textMessage = session.createTextMessage("hello bruce2018,程序江湖!");
			createProducer.send(textMessage);
			session.commit();//提交事務
		} catch (JMSException e) {
			e.printStackTrace();
			try {
				session.rollback();//事務回滾
			} catch (JMSException e1) {
				e1.printStackTrace();
			}
		}finally{
			if(createProducer != null){
				try {
					createProducer.close();
				} catch (JMSException e) {
					e.printStackTrace();
				}
			}
			ConnectionUtil.getInstance().close(session, connection);
		}
    }
}

2.Topic模式:

生產者代碼:

package org.activemqstudy.topic;

import javax.jms.Connection;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage;

import org.activemqstudy.util.ConnectionUtil;
import org.activemqstudy.util.Constanst;

/**
 * 生產者
 * @author bruce2018 [微信公衆號:程序江湖]
 * csdn:https://blog.csdn.net/zpl123456
 * jianshu:https://www.jianshu.com/u/effeedbfe8d7
 * juejin:https://juejin.im/post/5c8b0cfce51d4553de1fa545
 */
public class AppTopicProduct 
{
    public static void main( String[] args )
    {
    	product();
    }
    
    public static void product(){
    	Connection connection = null;//連接
        Session session = null;//發送或者接受發送消息的線程
        MessageProducer createProducer = null;//消息生產者
        try {
        	//1.創建工廠鏈接對象,指定Ip和端口號
			connection = ConnectionUtil.getInstance().createConnection();
			//開啓連接
			connection.start();
			//使用連接創建回話session對象
//		    static final int AUTO_ACKNOWLEDGE = 1;  自動確認模式,不需要客戶端進行確認
//		    static final int CLIENT_ACKNOWLEDGE = 2; 客戶端進行確認
//		    static final int DUPS_OK_ACKNOWLEDGE = 3; 允許重複消息
			session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE);//開始事務  也可以不用開啓事務
			//使用回話對象創建目標對象,包含queue或者topic
			Destination de = session.createTopic(Constanst.TOPIC);
			
			//使用回話對象創建生產者對象
			createProducer = session.createProducer(de);
			for(int i=0;i<10;i++){
				TextMessage textMessage = session.createTextMessage("hello bruce2018,程序江湖!"+i);
				createProducer.send(textMessage);
			}
		} catch (JMSException e) {
			e.printStackTrace();
			try {
				session.rollback();//事務回滾
			} catch (JMSException e1) {
				e1.printStackTrace();
			}
		}finally{
			if(createProducer != null){
				try {
					createProducer.close();
				} catch (JMSException e) {
					e.printStackTrace();
				}
			}
			ConnectionUtil.getInstance().close(session, connection);
		}
    }
}

 

消費者代碼:

package org.activemqstudy.topic;

import java.io.IOException;

import javax.jms.Connection;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.MessageListener;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.jms.Topic;

import org.activemqstudy.util.ConnectionUtil;
import org.activemqstudy.util.Constanst;

/**
 * 消費者
 * 
 * @author bruce2018 [微信公衆號:程序江湖] 
 * csdn:https://blog.csdn.net/zpl123456
 * jianshu:https://www.jianshu.com/u/effeedbfe8d7
 * juejin:https://juejin.im/post/5c8b0cfce51d4553de1fa545
 */
public class AppConsumer0 {

	public static void main(String[] args) {
		consumer();
	}

	/**
	 * 生產者
	 */
	public static void consumer() {
		Connection connection = null;
		Session session = null;
		MessageConsumer createConsumer = null;
		try {
			connection = ConnectionUtil.getInstance().createConnection();
			;
			connection.start();
			session = connection.createSession(false,
					Session.CLIENT_ACKNOWLEDGE);
			Topic createTopic = session.createTopic(Constanst.TOPIC);
			createConsumer = session.createConsumer(createTopic);
			createConsumer.setMessageListener(new ConsumerListener());
			System.in.read();
		} catch (JMSException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (createConsumer != null) {
				try {
					createConsumer.close();
				} catch (JMSException e) {
					e.printStackTrace();
				}
			}
			ConnectionUtil.getInstance().close(session, connection);
		}
	}

	/**
	 * 
	 * @author bruce2018
	 *
	 */
	private static class ConsumerListener implements MessageListener {
		@Override
		public void onMessage(Message message) {
			if (message instanceof TextMessage) {
				TextMessage textMessage = (TextMessage) message;
				try {
					System.out.println("consumer0:"+textMessage.getText());
				} catch (JMSException e) {
					e.printStackTrace();
				}
			}
		}
	}
}

代碼地址:

https://github.com/zplswf/mq/tree/master/mqstudy/activemqstudy

歡迎關注我的公衆號:程序江湖

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章