3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

# Azure 向け Spring ライブラリまとめ

Last updated at Posted at 2021-05-07

いくつか Azure 向けの Spring ライブラリを紹介してきましたが、今回はそのまとめです。必要な事は全て以下に書いてあると思います。

Azure Spring Boot

その名の通り、Spring Boot 用のライブラリ群です。基本的に、Spring Boot 2.2/2.3/2.4 に対応しています。

対応しているサービスは、主な物を上げると以下の通り。

  • Active Directory / Active Directory B2C
  • Cosmos DB
  • Key Vault (Secret/Certificate)
  • サービスバス
  • ストレージ(BLOB)

また、最新版は、以下のような作りになっています。

  • バージョンが、3.0 以降
  • 名前空間が com.microsoft.azure から com.azure.spring
  • Artifact Id が azure-spring-boot-starter-* で統一

たまにSDK間で依存関係の不具合がおきたりするので、dependencyManagement でBOMを指定しましょう。Spring Initializr で作ると、ちゃんと埋め込まれています。BOMとは依存関係のバージョンをしたりすると特殊なPOMらしいです。

Maven Repository: com.azure.spring » azure-spring-boot-bom

  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>com.azure.spring</groupId>
        <artifactId>azure-spring-boot-bom</artifactId>
        <version>${azure.version}</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
    </dependencies>
  </dependencyManagement>

これに当てはまらないものは、すでに Deprecated になっているライブラリもありますので、使い始める際には注意したほうがよいです。

MSのドキュメントは更新が追いついていないせいか、古いライブラルを紹介している場合も多いので、原文(英語)を確認したり、Githubを当たった方が最新の情報を得られると思います。

Azure Spring Cloud

Spring Cloud は、マイクロサービスベースのアプリを構築するために容易されたフレームワークです。Boot用というわけではなく、Spring アプリともシームレスに統合されているものです。

あまり強調しませんでしたが、以前に説明したKey Vault はBoot用、App Configuration は Cloud用のライブラリです。いまいちどのあたりに、その区切りとなる判断基準があるかわからないのですが、Key Vault だってマイクロサービスで使うでしょうに。

対応しているサービスは、主な物を上げると以下の通り。

  • キャッシュ(Azure Redis)
  • イベントハブ
  • サービスバス トピック&キュー
  • ストレージキュー

また、最新版は、以下のような作りになっています。

  • バージョンは、2.0 以降
  • 名前空間が com.microsoft.azure から com.azure.spring
  • Artifact Id が azure-spring-cloud-* または、 azure-spring-integration-* で統一

個別にサンプルが用意されているので、試してみると良いと思います。

キュー連携を試してみる

試しに、azure-spring-cloud-starter-storage-queue を試してみます。Azure Functionsにキュートリガーがあるので、こちらの使いごこちはどのような物かという単なる興味からです。

生のキュークライアントをDIする代わりに、のStorageQueueOperation を介してキューのオペレーションをスルみたいです。

PostがメンドウだったのでGetでエンキューしていますが、sendAsync でエンキュー、
receiveAsync でデキューしています。

チェックポイントクラスで、成功の可否を判定しているのですが、これがどういた意味をなしているかはちょっと分らなかったです。


    @Autowired
    StorageQueueOperation storageQueueOperation;

    @GetMapping("/push")
    public String send(@QueryParam("message") String message) {
        this.storageQueueOperation
            .sendAsync(STORAGE_QUEUE_NAME, MessageBuilder.withPayload(message).build())
            .subscribe();
        LOGGER.info("Message {} has been sent successfully.", message);
        return message;
    }

    @GetMapping("/pull")
    public String receive() {
        this.storageQueueOperation.setMessagePayloadType(String.class);
        this.storageQueueOperation.setCheckpointMode(CheckpointMode.MANUAL);
        Message<?> message = this.storageQueueOperation.receiveAsync(STORAGE_QUEUE_NAME).block();
        if (message == null) {
            LOGGER.info("You have no new messages.");
            return null;
        }
        LOGGER.info("Message arrived! Payload: " + message.getPayload());

        Checkpointer checkpointer = message.getHeaders().get(AzureHeaders.CHECKPOINTER, Checkpointer.class);
        checkpointer.success()
                    .doOnSuccess(Void -> LOGGER.info("Message '{}' successfully checkpointed", message.getPayload()))
                    .doOnError(e -> LOGGER.error("Fail to checkpoint the message", e))
                    .subscribe();

        return (String) message.getPayload();
    }

まとめ

日々変化しているので、数ヶ月前の状況が古くなっていることが多いのですが、一次情報(Github)を当たれば、ソースも公開されていますし、サンプルもありますし、何かあればIssue切れますし、便利な世の中だなと思っている今日この頃です。こまったら、ソース見ましょう。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?