1. 程式人生 > 程式設計 >Java中間訊息件ActiveMQ使用例項

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,名稱
    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來管理了啊

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