溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

ActiveMQ中間消息件如何在Java項(xiàng)目中使用

發(fā)布時(shí)間:2021-03-23 15:28:32 來(lái)源:億速云 閱讀:164 作者:Leah 欄目:編程語(yǔ)言

今天就跟大家聊聊有關(guān)ActiveMQ中間消息件如何在Java項(xiàng)目中使用,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

消息一共有兩種接收和發(fā)送形式:點(diǎn)對(duì)點(diǎn)和發(fā)布定閱模式,也就是“一對(duì)一”和“一對(duì)多”。

1.導(dǎo)包(maven):

  <dependency>
      <groupId>org.apache.activemq</groupId>
      <artifactId>activemq-client</artifactId>
      <version>5.13.4</version>
    </dependency>

2.開(kāi)始寫(xiě)類(lèi),提供者(發(fā)送者)和消費(fèi)者(接收者)是兩個(gè)不同的項(xiàng)目,我們先創(chuàng)建普通的maven項(xiàng)目,而不是web項(xiàng)目點(diǎn)對(duì)點(diǎn)的方式(消息只能被消費(fèi)一次,如果同時(shí)有多個(gè)消費(fèi)者,誰(shuí)先搶到就是誰(shuí)的)

消息提供者

 public static void main(String[] args) throws JMSException {

    //創(chuàng)建連接工廠,這個(gè)參數(shù)就是自己的activeMQ的地址
    ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://192.168.25.180:61616");

    //2.創(chuàng)建連接
    Connection connection = connectionFactory.createConnection();

    //3.啟動(dòng)連接
    connection.start();

    //4.獲取session(會(huì)話對(duì)象)
    /*
    arg0 是否啟用事務(wù)
    arg1 消息的確認(rèn)方式 自動(dòng)確認(rèn)
     */
    Session session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE);

    //5.創(chuàng)建一個(gè)隊(duì)列對(duì)象,名稱(chēng)
    Queue firstQueue = session.createQueue("firstQueue");

    //6.創(chuàng)建一個(gè)消息的生產(chǎn)者對(duì)象
//    Destination destination = ;//目標(biāo)對(duì)象
    MessageProducer producer = session.createProducer(firstQueue);

    //7.創(chuàng)建一個(gè)消息
    TextMessage textMessage = session.createTextMessage("歡迎來(lái)到奇的天喻軟件");

    //8.發(fā)送消息
    producer.send(textMessage);
    //9.關(guān)閉資源
    producer.close();
    session.close();
    connection.close();

  }

消息消費(fèi)者

前幾步是一樣的,都是創(chuàng)建連接,只有第6步不一樣,創(chuàng)建的是一個(gè)消費(fèi)者

public static void main(String[] args) throws JMSException, IOException {
    ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://192.168.25.180:61616");

    //2.創(chuàng)建連接
    Connection connection = connectionFactory.createConnection();

    //3.啟動(dòng)連接
    connection.start();

    //4.獲取session(會(huì)話對(duì)象)
    /*
    arg0 是否啟用事務(wù)
    arg1 消息的確認(rèn)方式 自動(dòng)確認(rèn)
     */
    Session session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE);

    //5.創(chuàng)建一個(gè)隊(duì)列對(duì)象,名稱(chēng)
    Queue firstQueue = session.createQueue("firstQueue");



    //6.創(chuàng)建消息消費(fèi)者對(duì)象
    MessageConsumer consumer = session.createConsumer(firstQueue);

    //7.設(shè)置監(jiān)聽(tīng)
    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.等待鍵盤(pán)輸入
    //目的是為了讓程序停止來(lái)看效果
    System.in.read();


    //9.關(guān)閉資源
    consumer.close();
    session.close();
    connection.close();
  }

發(fā)布訂閱模式(發(fā)布消息后,只有在之前運(yùn)行的消費(fèi)者才能收到,消息被任何一個(gè)消費(fèi)者消費(fèi)后,以后啟動(dòng)的消費(fèi)者不能消費(fèi)之前的消息)

消息提供者

 //創(chuàng)建連接工廠
    ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://192.168.25.180:61616");

    //2.創(chuàng)建連接
    Connection connection = connectionFactory.createConnection();

    //3.啟動(dòng)連接
    connection.start();

    //4.獲取session(會(huì)話對(duì)象)
    /*
    arg0 是否啟用事務(wù)
    arg1 消息的確認(rèn)方式 自動(dòng)確認(rèn)
     */
    Session session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE);

    //5
    Topic topic = session.createTopic("first-topic");


    //6.創(chuàng)建一個(gè)消息的生產(chǎn)者對(duì)象
//    Destination destination = ;//目標(biāo)對(duì)象
    MessageProducer producer = session.createProducer(topic);

    //7.創(chuàng)建一個(gè)消息
    TextMessage textMessage = session.createTextMessage("歡迎來(lái)到奇的天喻軟件");

    //8.發(fā)送消息
    producer.send(textMessage);


    //9.關(guān)閉資源
    producer.close();
    session.close();
    connection.close();

消費(fèi)者

ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://192.168.25.180:61616");

    //2.創(chuàng)建連接
    Connection connection = connectionFactory.createConnection();

    //3.啟動(dòng)連接
    connection.start();

    //4.獲取session(會(huì)話對(duì)象)
    /*
    arg0 是否啟用事務(wù)
    arg1 消息的確認(rèn)方式 自動(dòng)確認(rèn)
     */
    Session session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE);

    //5
    Topic topic = session.createTopic("first-topic");



    //6.創(chuàng)建消息消費(fèi)者對(duì)象
    MessageConsumer consumer = session.createConsumer(topic);

    //7.設(shè)置監(jiān)聽(tīng)
    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.等待鍵盤(pán)輸入
    //目的是為了讓程序停止來(lái)看效果
    System.in.read();
    //9.關(guān)閉資源
    consumer.close();
    session.close();
    connection.close();

看完上述內(nèi)容,你們對(duì)ActiveMQ中間消息件如何在Java項(xiàng)目中使用有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝大家的支持。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI