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

「追加」を押します。

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

しばらくすると名前空間の作成が完了します。

名前空間を選択してエンティティの「キュー」を選びます。

「+キュー」で新しくキューを作成します。

名前を入力して「作成」を押します。

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

これで環境の準備が整ったので、次にアプリケーションを作成します。
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);
実行結果
アプリケーションを実行して、メッセージ送信まで行ったところにブレイクポイントを置いて止めました。

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

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

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