<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                ``` ActiveMQ中,持久化是指對消息數據的持久化。在ActiveMQ中,默認的消息是保存在內存中的。 當內存容量不足的時候,或ActiveMQ正常關閉的時候,會將內存中的未處理的消息持久化到磁盤中。 具體的持久化策略由配置文件中的具體配置決定。 ActiveMQ的默認存儲策略是kahadb。如果使用JDBC作為持久化策略,則會將所有的需要持久化的消息保存到數據庫中。 所有的持久化配置都在conf/activemq.xml中配置,配置信息都在broker標簽內部定義 ``` #### kahadb方式 ``` ActiveMQ默認的持久化策略。kahadb是一個文件型數據庫。是使用內存+文件保證數據的持久化的。 kahadb可以限制每個數據文件的大小。不代表總計數據容量 <persistenceAdapter> <!-- directory:保存數據的目錄; journalMaxFileLength:保存消息的文件大小 --> <kahaDB?directory="${activemq.data}/kahadb" journalMaxFileLength="16mb"/> </persistenceAdapter> 特性: 1、日志形式存儲消息 2、消息索引以B-Tree結構存儲,可以快速更新 3、完全支持JMS事務 4、支持多種恢復機制; ``` #### AMQ方式 ``` 只適用于5.3版本之前。 AMQ也是一個文件型數據庫,消息信息最終是存儲在文件中。內存中也會有緩存數據。 <persistenceAdapter> <!-- directory:保存數據的目錄 ;?maxFileLength:保存消息的文件大小 --> <amqPersistenceAdapter?directory="${activemq.data}/amq" maxFileLength="32mb"/> </persistenceAdapter> 性能高于JDBC,寫入消息時,會將消息寫入日志文件,由于是順序追加寫,性能很高。為了提升性能, 創建消息主鍵索引,并且提供緩存機制,進一步提升性能。每個日志文件的大小都是有限制的(默認32m,可自行配置)。 當超過這個大小,系統會重新建立一個文件。當所有的消息都消費完成,系統會刪除這個文件或者歸檔。 主要的缺點是AMQ Message會為每一個Destination創建一個索引,如果使用了大量的Queue,索引文件的大小會占用很多磁盤空間。 而且由于索引巨大,一旦Broker(ActiveMQ應用實例)崩潰,重建索引的速度會非常慢。 雖然AMQ性能略高于Kaha DB方式,但是由于其重建索引時間過長,而且索引文件占用磁盤空間過大,所以已經不推薦使用。 ``` #### JDBC持久化方式 ``` ActiveMQ將數據持久化到數據庫中。 不指定具體的數據庫。 可以使用任意的數據庫中 一下示范使用MySQL數據庫 ``` ``` 首先定義一個mysql-ds的MySQL數據源 然后在persistenceAdapter節點中配置jdbcPersistenceAdapter并且引用剛才定義的數據源。 dataSource指定持久化數據庫的bean, createTablesOnStartup是否在啟動的時候創建數據表,默認值是true, 這樣每次啟動都會去創建數據表了,一般是第一次啟動的時候設置為true,之后改成false。 ``` ``` <broker?brokerName="test-broker" persistent="true" xmlns="http://activemq.apache.org/schema/core"> <persistenceAdapter> <jdbcPersistenceAdapter?dataSource="#mysql-ds" createTablesOnStartup="false"/> </persistenceAdapter> </broker> <bean?id="mysql-ds" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property?name="driverClassName" value="com.mysql.jdbc.Driver"/> <property?name="url" value="jdbc:mysql://localhost/activemq?relaxAutoCommit=true"/> <property?name="username" value="activemq"/> <property?name="password" value="activemq"/> <property?name="maxActive" value="200"/> <property?name="poolPreparedStatements" value="true"/> </bean> ``` ``` 配置成功后,需要在數據庫中創建對應的database,否則無法訪問。表格ActiveMQ可以自動創建。 ? activemq_msgs用于存儲消息,Queue和Topic都存儲在這個表中: ID:自增的數據庫主鍵 CONTAINER:消息的Destination MSGID_PROD:消息發送者客戶端的主鍵 MSG_SEQ:是發送消息的順序,MSGID_PROD+MSG_SEQ可以組成JMS的MessageID EXPIRATION:消息的過期時間,存儲的是從1970-01-01到現在的毫秒數 MSG:消息本體的Java序列化對象的二進制數據 PRIORITY:優先級,從0-9,數值越大優先級越高 ? activemq_acks用于存儲訂閱關系。如果是持久化Topic,訂閱者和服務器的訂閱關系在這個表保存: 主要的數據庫字段如下: CONTAINER:消息的Destination SUB_DEST:如果是使用Static集群,這個字段會有集群其他系統的信息 CLIENT_ID:每個訂閱者都必須有一個唯一的客戶端ID用以區分 SUB_NAME:訂閱者名稱 SELECTOR:選擇器,可以選擇只消費滿足條件的消息。條件可以用自定義屬性實現,可支持多屬性AND和OR操作 LAST_ACKED_ID:記錄消費過的消息的ID。 ? 表activemq_lock在集群環境中才有用,只有一個Broker可以獲得消息,稱為Master Broker, 其他的只能作為備份等待Master Broker不可用,才可能成為下一個Master Broker。 這個表用于記錄哪個Broker是當前的Master Broker。 只有在消息必須保證有效,且絕對不能丟失的時候。使用JDBC存儲策略。 如果消息可以容忍丟失,或使用集群/主備模式保證數據安全的時候,建議使用levelDB或Kahadb。 ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看