ActiveMQの永続性メカニズム

なぜ持続?

情報の損失の後に不慮のMQサーバーのダウンタイムを回避するために、メッセージキューを復元するために再起動した後に行われる必要がある、メッセージシステムは、一般的に適用される永続化メカニズム。

何種類ActiveMQの永続的な方法はありますか?

ActiveMQのメッセージの永続性メカニズムJDBC、AMQ、KahaDBとLevelDB、永続ストレージ論理メッセージの使用が一貫している方法に関係なく。

送信者が受信者にメッセージを送信しようと、ローカルデータファイル、メモリデータベースまたはリモート・データベースへのメッセージの最初のメッセージ、メッセージセンターの店舗を送信した後、メッセージは保存の成功から削除される。すなわち、故障が送信しようとし続けること。

メッセージセンターには、メッセージが正常に送信されていない場合は、指定した保存場所を確認して最初の打ち上げ後は、メッセージ送信済み取る必要があります。

1.AMQメッセージストア(消去されています)

AMQメッセージストアがあるActiveMQ5。0デフォルトの永続ストアは、対話するためのメッセージの形で流れ構造に基づいており、ファイル、高速なメッセージストアの構造を設計するためにトランザクショナルメモリです。あるインデックス付き参照STは、アクセス速度を向上させる鉱石ながらこのように、メッセージは、データログに記憶されます。日付別のデータ10gのファイルの数によって、ログ、デフォルトのファイルサイズが32Mで、メッセージのサイズは、データ・ログ・ファイルのサイズを超えた場合、あなたはデータログファイルのサイズを大きくするために設定を変更することができます。データログファイルのすべてのメッセージが正常に消費されている場合は、この

データログファイルには、クリーンアップの次のラウンドに削除またはアーカイブされるようにマークされます。

2.kahadb(デフォルト)ActiveMQ 5.3以后

どのように我々は、彼が現在それの公式黙認する方法を推奨していることを知っていますか?

ActiveMQのインストールディレクトリに、CONF / activemq.xmlようなノードは、以下に見ることができます

 

 インストールディレクトリデータディレクトリを表す$ {Activemq.data}は、データはここに保存された側

KahaDBは、任意のシーンは、パフォーマンスと回復力を改善するために使用することができ、デフォルトのストレージです。
メッセージストアが使用するトランザクションログをのみを持つインデックスファイルのアドレスのすべてを格納します。

KahaDBは、その使用パターンの典型的なメッセージが最適化された、特定のメッセージの永続性溶液です。データは、データログに追加されます。ログデータファイルが不要になった場合、ログファイルは破棄されません。

kahadbは、メッセージカタログだけで保存したファイルには4つのカテゴリ、ロックは非常に簡潔であるActiveMQの他のいくつかのファイルストレージエンジンと比較します。

 その後、我々はこれらの用語は、文書の四つのカテゴリーがあるどのような役割であると言います

1. DB-(ナンバー)の.logが  KahaDB数値も大きくなり、データファイルがいっぱいになると、それはすぐに新しいファイルを作成し、定義された所定のファイルサイズにメッセージデータレコードを格納します、 。任意のメッセージデータファイルが存在しない場合、ファイルへの参照が削除またはアーカイブされます。

2. db.dataこのファイルは、永続的なB-Treeインデックス、メッセージに記録されたメッセージデータ、インデックスファイルであるメッセージ、本質的に含まB木(Bツリー)、 B-treeインデックスポイントとして使用してDB- (数値)の.logメッセージ格納されている内部。

これらのページは、すべての空きページのファイルIDの特定のコンテンツのアイドルです3.db.free現在db.dataファイル

メッセージはKahaDBに格納されたメッセージの回復のために使用4.db.redoは、B木を回復するため、起動を終了するには、インデックスを強制的に

5.lockファイルロック、ブローカーは現在kahadbは、読み取りと書き込みのアクセス権を取得表し

3.LevelDB(一時的に推奨)

このファイルシステムはActiveMQ5.8後からインポート、およびKahaDBは、それが、ローカルデータベースファイルがの形式で格納されているに基づいており、非常に類似しているが、それはより速くKahaDB永続より提供されています。しかし、それは先行書き込みログにカスタムインデックスのBツリー・インプリメンテーションを使用しますが、インデックスベースLevelDB、ニーズや飼育係の使用を使用しません。

以下のような構成は以下のとおりです。

< persistenceAdapter > 
< levelDBdirectory = "ActiveMQのデータ"  /> 
</ persistenceAdapter >

4.JDBCメッセージストア

最初のステップ: mysqlのjarファイルのmysql-コネクタ-javaの-5.1.38.jarは、ActiveMQのインストールディレクトリに置かのlibディレクトリの下に

インストールディレクトリを見てください

 

 

 

 

ステップ2: ActiveMQの、のインストールディレクトリ変更のconf / activemq.xmlのファイルのデフォルト永続モードである<persistenceAdapter>ノードを、

ノードの注釈上の図は、新しいノードを追加します

 < persistenceAdapter > 
  <! - 持久化远程数据库- > 
     < jdbcPersistenceAdapter のdataSource = "#mysqlの-DS"   createTablesOnStartup = "真" />  
</ persistenceAdapter >

それはあなたが起動するたびにデータテーブルを作成するために行きますので、デフォルト値は、trueで、データテーブルを開始したときcreateTables0nStartupいいえスターは、作成通常、あなたが最初にtrueに偽の後に変更を起動したとき

第三段階:コンフィギュレーションデータソース

</ブローカー>の後のタグ、<インポート>データソースのラベルは、このようなJarファイル対応を変更するために導入する必要があるとして、デフォルトdbcp2を使用して、データソースの種類を設定を追加する前に

 

 

 

<!-- 数据源 -->
 <bean id="mysql-ds" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close">
    <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
    <property name="url" value="jdbc:mysql://192.168.118.1:3306/activemq?relaxAutoCommit=true"/>
    <property name="username" value="root"/>
     <property name="password" value="123"/>
     <property name="poolPreparedStatements" value="true"/>
  </bean>

为保证能够连接到MySQL服务器成功,你的mysql必须可以从远程登陆

这个时候只要在localhost的那台电脑,登入mysql后,更改 "mysql" 数据库里的 "user" 表里的 "host" 项,从"localhost"改称"%",然后重启MYSQL服务

 

 

 

之上的步骤操作无误的话,重新启动ActiveMQ的服务,就会在你的数据库下生成了三张表

 

 

activemq_msgs

 

 

 

activemq_acks

 

 

 

 activemq_lock

JDBC message store with activemq journal(基于JDBC调优)

这种方式克服了JDBC Store的不足,JDBC每次消息过来,都需要去写库和读库。ActiveMQ Journal,使用高速缓存写入技术,大大提高了性能。当消费者的消费速度能够及时跟上生产者消息的生产速度时,journal文件能够大大减少需要写入到DB中的消息。举个例子,生产者生产了1000条消息,这1000条消息会保存到journal文件,如果消费者的消费速度很快的情况下,在journal文件还没有同步到DB之前,消费者已经消费了90%的以上的消息,那么这个时候只需要同步剩余的10%的消息到DB。如果消费者的消费速度很慢,这个时候journal文件可以使消息以批量方式写到DB。

使用快速的缓存写入技术,大大提高了性能。配置实例如下:将之前配置的

 <persistenceAdapter>
  <!-- 持久化远程数据库 -->
     <jdbcPersistenceAdapter dataSource="#mysql-ds"  createTablesOnStartup="true"/> 
</persistenceAdapter>

注释掉,替换为如下配置

<persistenceFactory>
    <journalPersistenceAdapterFactory 
        journalLogFiles="4" 
        journalLogFileSize="32768" 
        useJournal="true" 
        useQuickJournal="true"
        dataSource="#mysql-ds"
        dataDirectory="activemq-data"/>
</persistenceFactory>

 

おすすめ

転載: www.cnblogs.com/yjc1605961523/p/11995908.html