Java中間訊息件ActiveMQ使用例項
阿新 • • 發佈:2020-01-07
先來說一說我們為什麼要用這個東西啊!
比如,我們現在有這樣了個問題要解決:
這樣,我們就要用到中間訊息間了
然後我們就說一下什麼是中間訊息間吧。
採用訊息傳送機制/訊息佇列 的中介軟體技術,進行資料交流,用在分散式系統的整合。
Java中對Jms有了定義,這是Java訊息的統一介面。什麼是ActiveMq呢?這是這個介面的一種實現,相當於資料庫連線驅動一樣,不同廠商有自己不同的實現,我們儘快看怎麼用程式碼實現吧。
訊息一共有兩種接收和傳送形式:點對點和釋出定閱模式,也就是“一對一”和“一對多”。
1.導包(maven):
<dependency> <groupId>org.apache.activemq</groupId> <artifactId>activemq-client</artifactId> <version>5.13.4</version> </dependency>
2.開始寫類,提供者(傳送者)和消費者(接收者)是兩個不同的專案,我們先建立普通的maven專案,而不是web專案點對點的方式(訊息只能被消費一次,如果同時有多個消費者,誰先搶到就是誰的)
訊息提供者
public static void main(String[] args) throws JMSException { //建立連線工廠,這個引數就是自己的activeMQ的地址 ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://192.168.25.180:61616"); //2.建立連線 Connection connection = connectionFactory.createConnection(); //3.啟動連線 connection.start(); //4.獲取session(會話物件) /* arg0 是否啟用事務 arg1 訊息的確認方式 自動確認 */ Session session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE); //5.建立一個佇列物件,名稱 Queue firstQueue = session.createQueue("firstQueue"); //6.建立一個訊息的生產者物件 // Destination destination = ;//目標物件 MessageProducer producer = session.createProducer(firstQueue); //7.建立一個訊息 TextMessage textMessage = session.createTextMessage("歡迎來到奇的天喻軟體"); //8.傳送訊息 producer.send(textMessage); //9.關閉資源 producer.close(); session.close(); connection.close(); }
訊息消費者
前幾步是一樣的,都是建立連線,只有第6步不一樣,建立的是一個消費者
public static void main(String[] args) throws JMSException,IOException { ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://192.168.25.180:61616"); //2.建立連線 Connection connection = connectionFactory.createConnection(); //3.啟動連線 connection.start(); //4.獲取session(會話物件) /* arg0 是否啟用事務 arg1 訊息的確認方式 自動確認 */ Session session = connection.createSession(false,名稱 Queue firstQueue = session.createQueue("firstQueue"); //6.建立訊息消費者物件 MessageConsumer consumer = session.createConsumer(firstQueue); //7.設定監聽 consumer.setMessageListener(new MessageListener() { @Override public void onMessage(Message message) { TextMessage textMessage = (TextMessage)message; try { System.out.println("提取的訊息是"+textMessage.getText()); } catch (JMSException e) { e.printStackTrace(); } } }); //8.等待鍵盤輸入 //目的是為了讓程式停止來看效果 System.in.read(); //9.關閉資源 consumer.close(); session.close(); connection.close(); }
釋出訂閱模式(釋出訊息後,只有在之前執行的消費者才能收到,訊息被任何一個消費者消費後,以後啟動的消費者不能消費之前的訊息)
訊息提供者
//建立連線工廠 ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://192.168.25.180:61616"); //2.建立連線 Connection connection = connectionFactory.createConnection(); //3.啟動連線 connection.start(); //4.獲取session(會話物件) /* arg0 是否啟用事務 arg1 訊息的確認方式 自動確認 */ Session session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE); //5 Topic topic = session.createTopic("first-topic"); //6.建立一個訊息的生產者物件 // Destination destination = ;//目標物件 MessageProducer producer = session.createProducer(topic); //7.建立一個訊息 TextMessage textMessage = session.createTextMessage("歡迎來到奇的天喻軟體"); //8.傳送訊息 producer.send(textMessage); //9.關閉資源 producer.close(); session.close(); connection.close();
消費者
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://192.168.25.180:61616"); //2.建立連線 Connection connection = connectionFactory.createConnection(); //3.啟動連線 connection.start(); //4.獲取session(會話物件) /* arg0 是否啟用事務 arg1 訊息的確認方式 自動確認 */ Session session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE); //5 Topic topic = session.createTopic("first-topic"); //6.建立訊息消費者物件 MessageConsumer consumer = session.createConsumer(topic); //7.設定監聽 consumer.setMessageListener(new MessageListener() { @Override public void onMessage(Message message) { TextMessage textMessage = (TextMessage)message; try { System.out.println("提取的訊息是"+textMessage.getText()); } catch (JMSException e) { e.printStackTrace(); } } }); //8.等待鍵盤輸入 //目的是為了讓程式停止來看效果 System.in.read(); //9.關閉資源 consumer.close(); session.close(); connection.close();
總結,是不是發現上邊程式碼都很相似,那麼完全可以用Spring來管理了啊
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。