1、ActiveMQ--起手問題記錄

引言

    activeMQ是很是流行的消息中間件,最近在下載完後遇到幾個問題,以爲有必要寫這篇博文做爲記錄整個起手的過程。java

問題描述

    一、下載完activeMQ後,打開bin目錄下的activeMQ.bat,不管怎麼點擊都會閃退?mysql

    二、http://localhost:8161/admin   這個地址的用戶名和密碼如何設置?web

問題解決

    一、 後面諮詢了下大佬,才發現問題很低級,就是其實activeMQ在window下跑是會分32位和64位的,個人電腦系統是64位的windows,須要點擊64文件夾下面的activeMQ.bat,ok開啓後控制檯界面是下面這樣的了:sql

 

 

 

 

 

 

 

 

    二、在 mq安裝目錄/conf/jetty.xml中,開啓權限控制數據庫

同時在/conf/jetty-realm.properties添加用戶apache

啓動

    解決了上面問題之後就能夠開始開心的玩耍了,首先啓動mq客戶端,而後登錄消息管理頁面,默認是在8161這個端口上,點擊消息代理管理鏈接:windows

    會提示你輸入用戶名和密碼,就是上面問題2中設置的:api

    輸入之後,就會跳轉到管理頁面,具體能夠自行點擊體驗:session

    好比進入消息隊列頁面,能夠看到列表頁有一個名爲FirstQueue的消息隊列,還有該隊列的待消費消息數量,消費消息數量,入列消息數量,出列消息數量等信息。jsp

這邊的操做列還提供了手動發送消息的功能:

    點擊發送之後,在開啓的消費端能夠收到下面的消息:

    考慮到宕機問題,咱們通常須要對發送的消息進行持久化,

producer = session.createProducer(destination);
producer.setDeliveryMode(DeliveryMode.PERSISTENT); //設置消息持久化
sendMsg(session,producer);
session.commit();

    持久化帶來的好處就是,宕機重啓好,消息不會丟失,宕機前未消費的消息,能夠在重啓後,從新消費。

    持久化存放的地址在apache-activemq\conf\activemq.xml在越80行會發現默認的配置項:

        <persistenceAdapter>
            <kahaDB directory="${activemq.data}/kahadb"/>
        </persistenceAdapter>

    上面默認使用的是kahaDB,是一個基於文件支持事務的消息存儲器,是一個可靠,高性能,可擴展的消息存儲器,固然咱們還可使用mysql等數據庫做爲持久化目的地,具體配置(在activeMQ.xml)和web項目中配置數據源如出一轍(須要下載mysql-connector包到activeMQ的lib包下)。

    上面說的是點對點方式的持久化,對於訂閱和消費模式,其實也有持久化的問題,持續訂閱和非持續訂閱,是針對「訂閱-發佈」模式的細分處理策略,在JMS規範中的標準稱呼是:Durable-Subscribers和Non-Durable Subscribers。
    Durable-Subscribers:是指在「訂閱-發佈」模式下,即便標記爲Durable-Subscribers的訂閱者下線了(多是由於訂閱者宕機,也多是由於這個訂閱者故意下線),「訂閱-發佈」模式的Topic隊列也要保存這些消息(視消息不一樣的持久化策略影響,保存機制不同),直到下次這個被標記爲Durable-Subscribers的訂閱者從新上線,並正確處理這條消息爲止。換句話說,標記爲Durable-Subscribers的訂閱者是否能得到某條消息,和它是否曾經下線沒有任何關係。
    Non-Durable Subscribers:是指在「訂閱-發佈」模式下,「訂閱-發佈」模式的Topic隊列不用爲這些已經下線的訂閱者保留消息。當後者將消息按照既定的廣播規則發送給當前在線的訂閱者後,消息就能夠被標記爲「處理完成」。

    具體在操做的是以下:

// 建立持久訂閱的時候,必需要設置client,不然會報錯:  
// 若是clientID重複(已經存在相同id的活動鏈接),會報錯  
// javax.jms.InvalidClientIDException: Broker: localhost - Client: 1  
// already connected from tcp://127.0.0.1:2758  
connection.setClientID("1");  
  
TopicSession session = connection.createTopicSession(false,Session.AUTO_ACKNOWLEDGE);  
// 在同一個鏈接的ClientID下,持久訂閱者的名稱必須惟一  
// javax.jms.JMSException: Durable consumer is in use for client: 1 and  
// subscriptionName: 11         
TopicSubscriber subscriber = session.createDurableSubscriber(topic,"11");

總結

    其實activeMQ其實仍是挺簡單的,api也很簡潔,從目前來看activeMQ支持的五種消息類型來講(消息類型JMS規範中的消息類型包括TextMessage、MapMessage、ObjectMessage、BytesMessage、和StreamMessage),可作的事情很是多,能夠多嘗試下,下一篇大概介紹一下activeMQ的應用場景。

相關文章
相關標籤/搜索