中介軟體 activeMQ Jms Java Demo,activemqjms
一、什麼是ActiveMQ
百度解釋:
ActiveMQ 是Apache出品,最流行的,能力強勁的開源訊息匯流排。ActiveMQ 是一個完全支援JMS1.1和J2EE 1.4規範的 JMS Provider實現,儘管JMS規範出台已經是很久的事情了,但是JMS在當今的J2EE應用中間仍然扮演著特殊的地位。
https://baike.baidu.com/item/ActiveMQ/7889688?fr=aladdin
二、安裝ActiveMq
windows
訪問ActiveMQ官網下載ActiveMq
http://activemq.apache.org/
下載完畢後,直接解壓即可,然後進入bin目錄,選擇運行位元(32位,64位)
1)可以點擊InstallService.bat 直接啟動
2)也可以點擊activemq.bat 安裝到window服務,每次電腦啟動時就會自動啟動
三、訪問ActiveMQ
開啟瀏覽器輸入:http://127.0.0.1:8161 如,登入的名稱和密碼都是:admin
看到即代表登入成功了!!!
四、編寫demo代碼
Maven項目
<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.zy.jms</groupId> <artifactId>jms</artifactId> <version>1.0-SNAPSHOT</version> <dependencies> <dependency> <groupId>org.apache.activemq</groupId> <artifactId>activemq-all</artifactId> <version>5.9.0</version> </dependency> </dependencies></project>
pom.xml
public class AppConsumer { private static final String url = "tcp://127.0.0.1:61616"; private static final String queueName = "queue_message"; public static void main(String[] args) throws JMSException { //1.建立串連工場 ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(url); //2.建立串連 Connection connection = connectionFactory.createConnection(); //3.啟動串連 connection.start(); //4.建立會話 Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); //5.建立一個目標 Destination destination = session.createQueue(queueName); //6.建立消費者 MessageConsumer consumer = session.createConsumer(destination); //7.建立一個監聽器 consumer.setMessageListener(new MessageListener() { public void onMessage(Message message) { TextMessage textMessage = (TextMessage) message; try { System.out.println("接收訊息:" + textMessage.getText()); } catch (JMSException e) { e.printStackTrace(); } } }); //connection.close(); }}
AppConsumer.java
public class AppProducer { private static final String url = "tcp://127.0.0.1:61616"; private static final String queueName = "queue_message"; public static void main(String[] args) throws JMSException { //1.建立串連工場 ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(url); //2.建立串連 Connection connection = connectionFactory.createConnection(); //3.啟動串連 connection.start(); //4.建立會話 Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); //5.建立一個目標 Destination destination = session.createQueue(queueName); //6.建立生產者 MessageProducer producer = session.createProducer(destination); for (int i = 0; i < 100; i++) { //7.建立訊息 TextMessage textMessage = session.createTextMessage("activeMQ" + i); producer.send(textMessage); } System.out.print("所有訊息已經全部發送完了"); connection.close(); }}
AppProducer.java
五、說明
代碼是示範的隊列模式,還有一種是主題模式
如果要用主題模式可以修改代碼碼如下:
Destination destination = session.createQueue(queueName);
改為:
Destination destination = session.createTopic(topicName);
即可!!!
設定持久化:
producer.setDeliveryModel(DeliveryMode.PERSISTENT);
六、比較
隊列模式:在點對點的傳輸方式中,訊息資料被持久化,每條訊息都能被消費,沒有監聽QUEUE地址也能被消費,資料不會丟失,一對一的發布接受策略,保證資料完整。
主題模式:在發布訂閱訊息方式中,訊息是無狀態的,不保證每條訊息被消費,只有監聽該TOPIC地址才能收到訊息並消費,否則該訊息將會丟失。一對多的發布接受策略,可以同時消費多個訊息。