Challenge Java EE !

Java EEを中心に趣味や仕事における開発メモを書いています。Java EEはJakarta EEに名前が変わりましたが、当面ブログ名はこのままにします。

Java client library for Azure Service Busでメッセージの送受信をする

Java EEを仕事で使っていた頃、JMSを使う機会がなく、実はメッセージキューを触るのは初めてです。タイトルのとおり、JavaでAzure Service Busのメッセージを送受信したのでメモします。

Azure Service Busの準備

「すべてのサービス」から「Service Bus」を選択します。
f:id:kikutaro777:20190225225754p:plain

「追加」を押します。
f:id:kikutaro777:20190225225812p:plain

名前を入れて、必須情報を設定します。価格レベルは「Basic」にしました。料金に関してはこちらを参照してください。
f:id:kikutaro777:20190225225843p:plain

しばらくすると名前空間の作成が完了します。
f:id:kikutaro777:20190225225908p:plain

名前空間を選択してエンティティの「キュー」を選びます。
f:id:kikutaro777:20190225230010p:plain

「+キュー」で新しくキューを作成します。
f:id:kikutaro777:20190225230050p:plain

名前を入力して「作成」を押します。
f:id:kikutaro777:20190225230138p:plain

キューが作成されたら設定の「共有アクセスポリシー」を選択して、プライマリー接続文字列をコピーします。
f:id:kikutaro777:20190225230320p:plain

これで環境の準備が整ったので、次にアプリケーションを作成します。

Java client library for Azure Service Busの利用

Azure Service BusのクライアントライブラリのGitHubは以下です。
github.com

Mavenの依存性は次のとおりです。

<dependency> 
    <groupId>com.microsoft.azure</groupId> 
    <artifactId>azure-servicebus</artifactId> 
    <version>1.2.8</version>
</dependency>

あとはメッセージの送受信を書くだけです。とりあえず簡単に「hello」という文字列をメッセージとして送信しました。

QueueClient client = new QueueClient(new ConnectionStringBuilder("Endpoint=sb://xxxxxxxxxxx.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=xxxxx", "作成したキューの名前"), ReceiveMode.PEEKLOCK);
Message message = new Message("hello");
client.sendAsync(message).thenRunAsync(() -> System.out.println("done"));

今回は同じアプリケーションの中で、このまま受信をしました。

ExecutorService exec = Executors.newSingleThreadExecutor();
client.registerMessageHandler(new IMessageHandler(){    
    @Override
    public CompletableFuture<Void> onMessageAsync(IMessage message) {
        byte[] body = message.getBody();
        System.out.println("messageid : " + message.getMessageId());
        System.out.println("body : " + new String(body));
        return CompletableFuture.completedFuture(null);
     }
        
     @Override
     public void notifyException(Throwable exception, ExceptionPhase phase) {           
     }
}, new MessageHandlerOptions(1, true, Duration.ofMinutes(1)), exec);

実行結果

アプリケーションを実行して、メッセージ送信まで行ったところにブレイクポイントを置いて止めました。
f:id:kikutaro777:20190225231943p:plain

ここでAzure Service Busのキューを確認すると「アクティブメッセージ数」が0から1に変わっています。ちゃんとメッセージがキューに入りました。
f:id:kikutaro777:20190225232050p:plain

ブレイクポイントから先に進めて受信をすると次のように「hello」が受信できました。
f:id:kikutaro777:20190225232314p:plain

とりあえず動作確認できたー。

にほんブログ村 IT技術ブログへ
にほんブログ村 にほんブログ村 IT技術ブログ Javaへ
にほんブログ村