Java中間消息件ActiveMQ使用實例

發布時間: 2019-11-14 11:35:01 來源: 互聯網 欄目: Java 點擊:

這篇文章主要介紹了Java中間消息件ActiveMQ使用實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

先來說一說我們為什么要用這個東西啊!

比如,我們現在有這樣了個問題要解決:

這樣,我們就要用到中間消息間了

然后我們就說一下什么是中間消息間吧。

采用消息傳送機制/消息隊列 的中間件技術,進行數據交流,用在分布式系統的集成。
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,Session.AUTO_ACKNOWLEDGE);

    //5.創建一個隊列對象,名稱
    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來管理了啊

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持我們。

本文標題: Java中間消息件ActiveMQ使用實例
本文地址: http://www.leskzw.tw/ruanjian/java/286280.html

如果認為本文對您有所幫助請贊助本站

支付寶掃一掃贊助微信掃一掃贊助

  • 支付寶掃一掃贊助
  • 微信掃一掃贊助
  • 支付寶先領紅包再贊助
    聲明:凡注明"本站原創"的所有文字圖片等資料,版權均屬編程客棧所有,歡迎轉載,但務請注明出處。
    詳解基于SpringBoot使用AOP技術實現操作日志管理Java數組集合的深度復制代碼實例
    Top 广东好彩1中奖规则