メッセージの信頼性を確保するための3つの側面
1.消息的持久化
2.物事
3.記号
A:PERSISTENT:永続
パラメータ説明:1.持続性
2.非持久化
Javaの永続化と非永続の内側に設定してください
持久化:
持続性が持続するように設定されています
ダウンタイムの前に、データは通常、ない消費であります
サーバーの復旧後にデータがまだ存在している、メッセージが消費されていない3
非持久化
非永続的な設定
前ダウン
サーバーが復元された後、メッセージが失われます
指定されていない場合、デフォルトは永続的である場合、上記の例では、持続的かつ非永続指定します
これらは、キュー(待ち行列)のモデルです
テーマ(トピック)
サブスクリプションモデルの下で生産者は、何の加入者が存在しない場合、および、メッセージがニュースを無駄に等しいされるものにかかわらずにメッセージを送信しても意味がありませんよう永続的なテーマは、加入者のためのものであるので、消費者側にする必要があります固執
実験:
1.まず、消費者が購読:(オンライン)の加入者を図
コード:
パッケージcom.steak.activemq.test。 輸入org.apache.activemq.ActiveMQConnectionFactory; インポートするjavax.jms *。; インポートにjava.io.IOException; パブリック クラスコンシューマー{ プライベート 静的 最終 StringACTIVE_URL = "TCP://127.0.0.1:61616" ; プライベート 静的 最終 StringQUEUE =「topic_persist」。 パブリック 静的 ボイドメイン(文字列[]引数)スローたJMSExceptionは、IOException { // 创建连接工厂 ActiveMQConnectionFactory activeMQConnectionFactory = 新しいですActiveMQConnectionFactory(ACTIVE_URL); // 接続入手する工場接続することにより、 接続接続 = activeMQConnectionFactory.createConnectionを(); connection.setClientID(「劉カード」); // 加入 // セッションを作成し、最初のものは、パラメータは、第二と呼ばれます記号と呼ばれる セッションのセッションを(= connection.createSession 偽、Session.AUTO_ACKNOWLEDGE); // 先作成 トピックトピック = session.createTopic(QUEUE); // 永続加入者 のTopicSubscriberのTopicSubscriber(トピックを= session.createDurableSubscriberを、 "発言を使用します" ); connection.start(); メッセージメッセージ= TopicSubscriber.receive(); 一方、(NULL!= メッセージ){ のTextMessageのTextMessage = (のTextMessage)メッセージ; のSystem.out.println( "トピックメッセージの永続性" + textMessage.getText()); // もし1秒メッセージが受信されなかった後、自動的に離陸に対応し、切断 メッセージを = topicSubscriber.receive(1000L ); } Session.close(); Connection.close(); } }
2.次に、生産者(出版社)開始:このポイントリリース3で、加入者は3を受け取りました
コード:
パッケージcom.steak.activemq.test; インポートorg.apache.activemq.ActiveMQConnectionFactory; インポートするjavax.jms。* ; パブリック クラスのプロデューサー{ プライベート 静的 最終 StringACTIVE_URL = "TCP://127.0.0.1:61616" ; プライベート 静的 最終 StringQUEUE =「topic_persist」; パブリック 静的 ボイドメイン(文字列[]引数)がスローたJMSException { // 接続ファクトリを作成 ActiveMQConnectionFactory activeMQConnectionFactory = 新しい新しいActiveMQConnectionFactory(ACTIVE_URLを); // 接続ファクトリを介して、接続が得られます。 接続の接続 = activeMQConnectionFactory.createConnection(); // セッションを作成 セッションをセッション = connection.createSession(偽、Session.AUTO_ACKNOWLEDGEを); // 宛先を作成する トピックのトピック = session.createTopic(QUEUE); //はメッセージプロデューサ作成 のMessageProducerをMessageProducer = session.createProducer(トピック); connection.start(); //はのMessageProducerキューMQ使用して生産にメッセージを送信 するための(INT。;私は<3 I ++はI = 0 ){ // 作成メッセージ のTextMessageのTextMessageを= Session.createTextMessage( "メッセージ" + I); // のMessageProducerを介してメッセージを送信する messageProducer.send(のTextMessage); } // リソース閉じ messageProducer.closeを(); Session.close(); Connection.close(); システム。 out.printlnを( "送信完了メッセージ" ); } }
オンラインからの消費者がオフラインになったので、切断上でメッセージを受信しない場合、我々は1秒後に設定しているので
()を受信するように設定されている場合、それはモニターされている(当該されたマイクロチャネル公衆番号に相当し、メッセージを受信することができました)
消費者がオンラインであるかどうか、あなたがメッセージを受信できない、離陸するために引き継がれたメッセージ(私と同等のものを受け取ることはありません、ないオンライン、次の時間を接続し、受信、私は再びこのことについて心配します、I私はまた、メッセージが受信されている。この時間を取ることができます)、ニュースは確かに受信されていない前に最初に登録され、時間の前提を登録