Upgrade to Pro — share decks privately, control downloads, hide ads and more …

HornetQ勉強会(超入門編)

 HornetQ勉強会(超入門編)

Avatar for Takahiro Shigemoto

Takahiro Shigemoto

March 07, 2017
Tweet

More Decks by Takahiro Shigemoto

Other Decks in Programming

Transcript

  1. 1 内容 1. HornetQの概要と特徴 2. HornetQを使ったシステム構成例 3. インストール方法 4. 起動と停止

    5. JMSキューの作り方 6. キューPush/Popを行うアプリケーション 7. キューの中身を見るには 8. JMX interfaceにリモートで接続する 9. JMSを実装した他製品 10.参考資料
  2. 2 1.HornetQの概要と特徴 • HornetQとは • Javaで実装されたオープンソースのMOM。 (Message Oriented Middleware) •

    分散システムでメッセージを送ったり受け取ったりするためのソフトウェア。 • いわゆる分散キューのこと。 • HornetQの特徴 • JMS、CoreAPI、Restfulなど、複数のメッセージングAPIに対応している。 • HornetQ単体で動作させることも出来るし、JBoss Application Serverに組み 込んで使うことも出来る。 • クラスタ化出来る。(この資料ではスタンドアロン、クラスタなしのみ扱 う。) • JMSとは • Java Message Serviceの略 • Javaプログラムにネットワークを介してデータを送受信させるためのAPIであ る。
  3. 3 2.HornetQを使ったシステム構成例 • JMS Request/Replyパターン • JMS Publisher/Subscriberパターン Requester Replier

    Request Queue Reply Queue ① ② ③ ④ Publisher Subscriber1 Topic ① ② Subscriber2 Subscriber3
  4. 4 3.インストール方法 1. 事前準備 −Java7以降のJDKがインストールされており、JAVA_HOME/binディレクトリ にパスが通っていること。 2. 下記のURLより最新版をダウンロードする。 • http://hornetq.jboss.org/downloads

    • 2017/3/7時点では、2.4.0が最新(hornetq-2.4.0.Final-bin.zip) 3. zipファイルを解凍する。 −hornetq-2.4.0.Finalディレクトリが解凍される。 −以降、仮にC:¥app¥hornetq-2.4.0.Finalに配置したとする。 −(以下、HORNETQ_HOMEと表記する。)
  5. 6 5.JMSキューの作り方(1) 1. 設定ファイルにJMSキュー定義を追加する。 −HORNETQ_HOME/config/stand-alone/non-clustered/hornetq-jms.xmlファ イルを開く。 2. ファイルの一番下にキュー定義を追加する。 3. ファイルを保存してHornetQを再起動する。

    Hornetq-jms.xmlファイル抜粋 ・・・ </connection-factory> <queue name="DLQ"> <entry name="/queue/DLQ"/> </queue> <queue name="ExpiryQueue"> <entry name="/queue/ExpiryQueue"/> </queue> </configuration> デフォルトでDLQ、ExpiryQueueが定義されている ので、その下に追加する。 <queue name=“ExampleQueue"> <entry name="/queue/ExampleQueue"/> </queue>
  6. 9 6.キューPush/Popを行うアプリケーション(1) • JMSコネクションの生成 • Step2&3:Queue/ConnectionFactoryオブジェクトを直接newで生成しない で、JNDI lookupを利用してオブジェクトを生成する。 • Step5:createSessionの第一引数は、トランザクションを利用するかどうか。

    (このサンプルではトランザクションを利用しないのでfalse) // Step 1. Create an initial context to perform the JNDI lookup. final Properties env = new Properties(); env.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory"); env.put(Context.PROVIDER_URL, "jnp://localhost:1099"); // 認証かかってる場合は、ここでユーザ・パスワードを指定する initialContext = new InitialContext(env); // Step 2. Perfom a lookup on the queue Queue queue = (Queue)initialContext.lookup("/queue/ExampleQueue"); // Step 3. Perform a lookup on the Connection Factory ConnectionFactory cf = (ConnectionFactory)initialContext.lookup("/ConnectionFactory"); // Step 4.Create a JMS Connection connection = cf.createConnection(); // Step 5. Create a JMS Session Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); ベンダ依存しないので、クライアントを 変えることなく、MOM製品を変更する ことが可能。(理論上は)
  7. 10 6.キューPush/Popを行うアプリケーション(2) • キューへのメッセージのPush • Step6: Queueに対してProducerを作成する。 • Step7: Messageを作成する。(ここではTextMessage)

    • Step8: MessageをPushする。 // Step 6. Create a JMS Message Producer MessageProducer producer = session.createProducer(queue); // Step 7. Create a Text Message TextMessage message = session.createTextMessage("This is a text message"); // Step 8. Send the Message producer.send(message);
  8. 11 6.キューPush/Popを行うアプリケーション(3) • キューからのメッセージのPop • Step9: Queueに対してConsumerを作成する。 • Step10: Connectionを開始する。

    (受信側は必須、送信側は不要) • Step11: MessageをPopする。 • 引数の5000は、Popのタイムアウト時間[ミリ秒] キューにMessageが入っていない場合は、最大タイムアウト時間待つ。 タイムアウト時間待ってもキューにMessageが入らない場合は、nullが返される。 // Step 9. Create a JMS Message Consumer MessageConsumer messageConsumer = session.createConsumer(queue); // Step 10. Start the Connection connection.start(); // Step 11. Receive the message TextMessage messageReceived = (TextMessage)messageConsumer.receive(5000);
  9. 12 7.キューの中身を見るには(1) 1. jconsoleでHornetQのJMX interfaceに接続する。 2. MBeansタブで、org.hornetq>Queue>JMS>ExampleQueue>操作 >listMessagesを開く。 3. Filterの文字列を削除して(ブランクにして)、listMessagesボタ

    ンをクリックする。(肝心のメッセージの中身は見られないが) {JMSPriority=4, JMSMessageID=ID:b377cd26-02f7-11e7-8810-679d0510a6fd, address=jms.queue.ExampleQueue, JMSExpiration=0, __HQ_CID=b371d9b3-02f7-11e7- 8810-679d0510a6fd, JMSTimestamp=1488864854924, messageID=50, JMSDeliveryMode=PERSISTENT}
  10. 14 8. JMX interfaceにリモートで接続する • ローカルPC以外で起動しているHornetQにjconsoleで接続したい場合 は、下記の手順を行う。 • run.batを編集して、HornetQ起動時のVM引数を追加する。 •

    HornetQを再起動する。 • リモート・プロセスに接続する。 • service:jmx:rmi:///jndi/rmi://<hostname>:3000/jmxrmi • ユーザ名、パスワードはなし。 set JVM_ARGS=%CLUSTER_PROPS% -XX:+UseParallelGC -XX:+AggressiveOpts - XX:+UseFastAccessorMethods -Xms512M -Xmx1024M - Dhornetq.config.dir=%CONFIG_DIR% - Djava.util.logging.manager=org.jboss.logmanager.LogManager - Djava.util.logging.config.file=%CONFIG_DIR%¥logging.properties - Djava.library.path=. -Dcom.sun.management.jmxremote - Dcom.sun.management.jmxremote.port=3000 - Dcom.sun.management.jmxremote.ssl=false - Dcom.sun.management.jmxremote.authenticate=false
  11. 15 9.JMSを実装した他製品 • 下記あたりが有名か(他にもたくさんある) • Apache ActiveMQ(公式サイト) • http://activemq.apache.org/ •

    IBM Websphere MQ(公式サイト) • http://www-03.ibm.com/software/products/ja/websphere-mq (試用版ダウンロードできます) • Rabbit MQ(公式サイト) • https://www.rabbitmq.com/
  12. 16 10.参考資料 • HornetQ - putting the buzz in messaging

    - JBoss Community(公式 サイト) • http://hornetq.jboss.org/ • HornetQ Messaging Developer’s Guide • https://www.amazon.com/dp/B009X5KIGE • メッセージ指向ミドルウェア - Wikipedia • https://ja.wikipedia.org/wiki/%E3%83%A1%E3%83%83%E3%82%BB%E3%8 3%BC%E3%82%B8%E6%8C%87%E5%90%91%E3%83%9F%E3%83%89%E3% 83%AB%E3%82%A6%E3%82%A7%E3%82%A2 • Java Message Service - Wikipedia • https://ja.wikipedia.org/wiki/Java_Message_Service