ActiveMQ入門學習

一.ActiveMQ的簡介
Activemq : 是一個實現了JMS的消息中間間。該中間可跨平臺,java ,c++ python ,.net都能使用,最近流行websocket ,mqtt 也能實現,但是activemq 是java寫的,實現jms的規範寫的!
特點:
1、支持多種語言編寫客戶端
2、對spring的支持,很容易和spring整合
3、支持多種傳輸協議:TCP,SSL,NIO,UDP等
4、支持AJAX
消息形式:
1、點對點(queue)
2、一對多(topic

二.MQ的原理
在這裏插入圖片描述
三.MQ的作用
1.異步操作
在這裏插入圖片描述
2.流量削峯
在淘寶雙11的時候,晚上0點的時候會有大量的訂單產生,可能會導致服務器崩潰,我們可以使用ActiveMQ使訪問的流量均勻,以恆定的速率
在這裏插入圖片描述
3.解耦合
用戶下單成功後,不需要(order-service)依賴(message-api)發起遠程調用才能發送,只需要依賴mq就可以了
在這裏插入圖片描述
4.軟總線
本質就是遠程調用-》進程間的通信-》實現進程的內存共享
使用mq做軟總線:
1.所有的內核都必須連接在一個mq上面
2.每個內核都能向mq裏面發信息,
3.每個內核都能向mq裏面讀取信息。

四.ActiveMQ的安裝
1.把ActiveMQ的壓縮包上傳到Linux系統
在這裏插入圖片描述
2.解壓
在這裏插入圖片描述
3在bin目錄下啓動
在這裏插入圖片描述
4.頁面
在這裏插入圖片描述
5.創建隊列
在這裏插入圖片描述
6.創建主題
在這裏插入圖片描述
五.java操作ActiveMQ
1.導入依賴

	<dependency>
		<groupId>org.apache.activemq</groupId>
		<artifactId>activemq-all</artifactId>
		<version>5.15.9</version>
	</dependency>

2.接收隊列的消息
public class MQApp {

public static void main(String[] args) {
	listener();
	//sendQueueMsg();
}
public static void listener() {
	String brokerURL = "tcp://120.27.247.208:61616";
	// 1  連接工廠
	ActiveMQConnectionFactory activeMQConnectionFactory = new ActiveMQConnectionFactory(brokerURL);
	// 2 連接
	try {
		Connection connection = activeMQConnectionFactory.createConnection("admin", "admin");
		connection.start(); // 在監聽消息時,需要手動的啓動
		// 3 會話
		/**
		 * transacted : 是否支持事務
		 * acknowledgeMode:簽收模式,僅僅在事務爲false 才起作用,若是true,他沒有作用 
		 *  3 種簽收模式
		 *   1 AUTO_ACK(Session.AUTO_ACKNOWLEDGE) 只要客戶端拿到消息,就代表它消費成功了,mq 服務器也會刪除該消息
		 *   2 CLIENT_ACK(Session.CLIENT_ACKNOWLEDGE)客戶端要拿到消息,而且必須手動確認,該消費消費成功了,mq 服務器纔會刪除它
		 *   3 DUPS_ACK(批量的隨機簽收)和發送順序相關,當消息的數量達到一次次數後,進行一個簽收
		 *   
		 */
		Session session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE);
		// 5 消息發送的目的地(隊列) 
		Destination destination = new ActiveMQQueue("sxt.queue");
		// 6 消息的消費者
		MessageConsumer messageConsumer = session.createConsumer(destination);
		
		System.out.println("開始監聽");
		messageConsumer.setMessageListener(new MessageListener() { // 新啓動子線程
			
			@Override
			public void onMessage(Message message) {
             System.out.println("收到消息了");
             ActiveMQTextMessage textMsg = (ActiveMQTextMessage) (message);
             try {
				String text = textMsg.getText(); // 獲取消息的內容
				System.out.println("消息爲:"+text);
				message.acknowledge(); // 手動簽收消息
				session.commit();  // 消息被消費了,也要提交事務
			} catch (JMSException e) {
				e.printStackTrace();
			}
			}
		});
		
		System.in.read(); // 掛起主線程
	} catch (Exception e) {
		e.printStackTrace();
	}finally {
		// 關閉資源
	}
}
然後在運行queue 的接收端,可以看到消息已經發出了:

在這裏插入圖片描述
2.向隊列裏面發送消息
在這裏插入圖片描述
在運行queue 的接收端,可以看到消息已經發出了:
在這裏插入圖片描述

6.ActiveMQ實際上的使用(整合spring)
Spring-context
ActiveMq
Spring-Jms 在spring 裏面簡化對activemq的操作
Spring-Jms 對activemq 的java的做了封裝,以後操作activemq ,將非常簡單

<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-context</artifactId>
		<version>4.3.16.RELEASE</version>
	</dependency>
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-jms</artifactId>
		<version>4.3.16.RELEASE</version>
	</dependency>
	<!-- https://mvnrepository.com/artifact/org.apache.activemq/activemq-all -->
	<dependency>
		<groupId>org.apache.activemq</groupId>
		<artifactId>activemq-all</artifactId>
		<version>5.15.9</version>
	</dependency>

1.消息的發送 spring-jms-producer.xml
在這裏插入圖片描述
2.spring-jms-comsumer.xml

在這裏插入圖片描述
發送消息
public class ActiveMQApp {

public static void main(String[] args) {
	
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring-jms-comsumer.xml");
	JmsTemplate jmsTemplate = context.getBean(JmsTemplate.class);
	//jmsTemplate.send(destination, messageCreator);
	jmsTemplate.convertAndSend("boot");
	System.out.println("發送成功了");
	////////////////////監聽消息////////////////////
		try {
			System.out.println("開始監聽");
			System.in.read();
		} catch (IOException e) { 
			e.printStackTrace();
		}
}

}

監聽器
在這裏插入圖片描述
一個簡單的ActiveMQ就實現了 如果想要複雜使用的話,關於JMS中的生產者和消費者參數可以詳細瞭解一下,比如能配置隊列消息存活時間,消費優先級,消費模式。

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