ActiveMQ的簡單Topic實現案例

首先我們在這裏要說一下消息中間件中有兩個角色,生產者Producer與消費者Consumer,簡單理解即使發發送消息者與接收消息者,在編寫代碼之前我們需要將下載到的ActiveMQ壓縮包中的activemq-all-5.13.4.jar包導入項目,接下來我們用代碼展示一下ActiveMQ的獨特魅力。

Producer類:

package com.yc.mytest;

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

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

public class MyProducer {
	private static final String URL=ActiveMQConnection.DEFAULT_BROKER_URL; //默認的連接地址
	private static String TOPIC_NAME="MyTopicTest"; //topic名字
	
	public static void main(String[] args) {
		ConnectionFactory factory; //連接工廠
		Connection conn = null; //連接
		Session session; //會話
		Destination dest; //消息的目的地
		MessageProducer producer; //消息生產者

		try {
			//初始化連接工廠
			factory=new ActiveMQConnectionFactory(URL); 

			//獲取連接
			conn=factory.createConnection(); 

			//開始連接
			conn.start();

			//創建Session,此方法第一個參數表示會話是否在事務中執行,第二個參數設定會話的應答模式
			session=conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
			
			//創建topic,producer和consumer將根據TOPIC_NAME來發送/接收對應的消息 
			dest=session.createTopic(TOPIC_NAME); 
			
			//創建生產者
			producer=session.createProducer(dest);
			
			//發送消息
			sendMessage(session, producer);
		} catch (Exception e) {
			System.out.println("出錯啦!!!");
			e.printStackTrace();
		} finally{
			if(conn!=null){
				try {
					//關閉連接
					conn.close();
				} catch (JMSException e) {
					e.printStackTrace();
				}
			}
		}
	}
	
	private static void sendMessage(Session session,MessageProducer producer) throws JMSException{
        //初始化一個mq消息
        TextMessage message = session.createTextMessage() ;//= session.createTextMessage("你好 ActiveMq " + i);
       
        //填寫消息內容
        message.setText("你好 ActiveMq");
        
        //發送消息
        producer.send(message);
        
        System.out.println("消息發送成功!!!");
	}
}

Consumer類:

package com.yc.mytest;

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.Session;
import javax.jms.TextMessage;

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

public class MyConsumer implements MessageListener {
	private static final String URL=ActiveMQConnection.DEFAULT_BROKER_URL; //默認的連接地址
	private static String TOPIC_NAME="MyTopicTest"; //topic名字

	public static void main(String[] args) {
		ConnectionFactory factory; //連接工廠
		Connection conn = null; //連接
		Session session; //會話
		Destination dest; //消息的目的地
		MessageConsumer consumer; //消費者
		
		try {
			//初始化連接工廠
			factory=new ActiveMQConnectionFactory(URL); 

			//獲取連接
			conn=factory.createConnection(); 
			
			//開始連接
			conn.start(); 
			
			//創建Session,此方法第一個參數表示會話是否在事務中執行,第二個參數設定會話的應答模式
			session=conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
			
			//創建topic,producer和consumer將根據TOPIC_NAME來發送/接收對應的消息 
			dest=session.createTopic(TOPIC_NAME); 
			
			//創建消費者
			consumer=session.createConsumer(dest);
			
			//初始化MessageListener
			MyConsumer me=new MyConsumer();
			
			//給消費者設定監聽對象
			consumer.setMessageListener(me);
		} catch (Exception e) {
			System.out.println("出錯啦!!!");
			e.printStackTrace();
		}
	}
	
	public void onMessage(Message message) {
		TextMessage txtMessage = (TextMessage)message;
		String text;
		try {
			text=txtMessage.getText();
			//txtMessage.acknowledge(); //通知服務器
			System.out.println("收到消息:"+text);
		} catch (JMSException e) {
			System.out.println("出錯啦!!!");
			e.printStackTrace();
		}
	}
}

好,到現在,我們的代碼就實現了。0.0簡單吧,我們來運行一下,在topic模式下需要先啓動消費者,在這裏我們啓動兩個消費者來模擬羣發


啓動生產者發送信息


在去看兩個消費者,會收到同樣的信息


我們去監控中看下信息


好,到此,我們最簡單的Topic模式就已經實現了大笑

發佈了36 篇原創文章 · 獲贊 4 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章