RectiveMq入門總結

1.生產者和消費者之間有時間上的相關性。訂閱一個主題的消費者只能消費自它訂閱之後發佈的消息。JMS 規範允許客戶創建持久訂閱,這在一定程度上放鬆了時間上的相關性要求。持久訂閱允許消費者消費它在未處於激活狀態時發送的消息。
2.訂閱者一和訂閱者二都能收到一樣的消息,也就是說在發佈訂閱模式下,一份消息可以被多個消費者消費
消息相關概念
消息類型

JMS 消息由以下三部分組成:
 消息頭。每個消息頭字段都有相應的getter 和setter 方法。
 消息屬性。如果需要除消息頭字段以外的值,那麼可以使用消息屬性。
 消息體。消息主題內容,JMS定義消息包括TextMessage、MapMessage、BytesMessage、StreamMessage、ObjectMessage類型
消息確認
JMS 消息只有在被確認之後,才認爲已經被成功地消費了。消息的成功消費通
常包含三個階段:客戶接收消息、客戶處理消息和消息被確認。
在事務性會話中,當一個事務被提交的時候,確認自動發生。在非事務性會
話中,消息何時被確認取決於創建會話時的應答模式(acknowledgementmode)。
該參數有以下三個可選值:
Session.AUTO_ACKNOWLEDGE。當客戶成功的從receive方法返回的時候,
或者從MessageListener.onMessage 方法成功返回的時候,會話自動確認
客戶收到的消息。
 Session.CLIENT_ACKNOWLEDGE。客戶通過消息的acknowledge 方法確認消
息。需要注意的是,在這種模式中,確認是在會話層上進行:確認一個被
消費的消息將自動確認所有已被會話消費的消息。例如,如果一個消息消
費者消費了10 個消息,然後確認第5 個消息,那麼所有10 個消息都被確
認。
 Session.DUPS_ACKNOWLEDGE。該選擇只是會話遲鈍的確認消息的提交。如
果JMS provider 失敗,那麼可能會導致一些重複的消息。如果是重複的
消息,那麼JMS provider 必須把消息頭的JMSRedelivered 字段設置爲
true。
消息持久化
AMQ Message Store
AMQ Message Store 是ActiveMQ5.0缺省的持久化存儲。Message commands 被
保存到transactional journal(由rolling data logs 組成)。Messages 被保
存到data logs 中,同時被reference store 進行索引以提高存取速度。Date logs
由一些單獨的data log 文件組成,缺省的文件大小是32M,如果某個消息的大
小超過了data log 文件的大小,那麼可以修改配置以增加data log 文件的大小。

本人在學習RectiveMq的道路上遇見的一些問題,查詢各種資料,把解決的辦法總結。歡迎大家互相討論,謝謝。

歡迎大家加羣 進行討論 qq羣:714398799

  1. 去官網下載linux的RectiveMq。
    http://activemq.apache.org/activemq-5140-release.html
    在這裏插入圖片描述

  2. 把下載好的文件放在linux的opt目錄下(opt目錄是專門存放第三方軟件的目錄)

  3. 解壓
    tar -zxvf apache-activemq-5.14.0-bin.tar.gz

  4. 建立文件夾 activemq
    mkdir activemq

  5. 移動解壓好的文件並重命名
    mv xxxx activemq

  6. 普通啓動
    ./activemq start

  7. 關閉
    ./activemq stop

  8. 重啓
    ./activemq restart

  9. 查看端口
    ps -ef|grep activemq |grep -v grep
    netstat -anp|grep 61616

  10. 測試訪問
    win:192.168.x.xx
    linux:192.168.xxx.x
    通過 ping ip 測試網絡通
    保證 linux服務器 防火牆關閉
    本地電腦也要關閉防火牆

  11. 創建maven項目引入maven

<dependency>
    <groupId>org.apache.activemq</groupId>
    <artifactId>activemq-all</artifactId>
    <version>5.14.4</version>
</dependency>
  1. 創建生產者
//linux服務器
private static final String BROKER_URL = "tcp://192.xx.xxx.xx8:61616";
private static final String producer = "queue";
public static void main(String[] args) throws JMSException {
    //建立生產者
    ActiveMQConnectionFactory connectionFaction = new ActiveMQConnectionFactory(BROKER_URL);
    Connection connection = connectionFaction.createConnection();
    connection.start();
    Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
    Queue queue = session.createQueue(producer);
    MessageProducer producer = session.createProducer(queue);
    for (int i=0;i<3;i++){
        TextMessage textMessage = session.createTextMessage("msg-----" + i);
        producer.send(textMessage);
    }
    producer.close();
    session.close();
    connection.close();
    System.out.println("send msg success");
}
  1. 通過activeMq8161端口來看你寫的消息
    在這裏插入圖片描述

14.創建消費者

private static final String BROKER_URL = "tcp://192.168.xxx.xxx:61616";
private static final String producer = "queue";
public static void main(String[] args) throws JMSException {
    ActiveMQConnectionFactory connectionFaction = new ActiveMQConnectionFactory(BROKER_URL);
    Connection connection = connectionFaction.createConnection();
    connection.start();
    Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
    //創建
    Queue queue = session.createQueue(producer);
    MessageConsumer consumer = session.createConsumer(queue);

    while (true){
        TextMessage receive = (TextMessage)consumer.receive();
        if(null != receive){
            System.out.println(receive.getText());
        }else{
            break;
        }
    }
    consumer.close();
    session.close();
    connection.close();
    System.out.println("成功消費mq");
}

執行完畢後,在管理界面,可以看到自己的信息個數,被消費了,消費者數量。

注意

  • 如果需要把消息存儲mysql,需要把mysql驅動包放在activemq的lib下
  • 我在安裝的過程中,遇見的關閉linux服務器防火牆,關閉方法按照百度的方法爲 service iptables stop,最後原來因爲是,centos7之後的關閉防火牆方法爲

關閉防火牆
systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall開機啓動
開啓端口
firewall-cmd --zone=public --add-port=80/tcp --permanent

  • Queue(點到點)模式
    在點對點的傳輸方式中,消息數據被持久化,每條消息都能被消費,沒有監聽QUEUE地址也能被消費,數據不會丟失,一對一的發佈接受策略,保證數據完整
  • 主題模式
    一對多的傳輸方式
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章