# Azure 为 Spring 库总结

我之前介绍了一些适用于Azure的Spring库,现在是总结的时候了。我认为以下所有需要的内容都已经写在下面了。

Azure Spring Boot 是一个在 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将会被嵌入其中。据说BOM是一种特殊的POM,用于指定依赖关系的版本。

Maven仓库: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>

由于一些已经被废弃的库,可能有一些不适用于这个情况,所以在开始使用之前需要注意。

由于微軟的文件更新跟不上,所以經常會介紹舊版的資訊,所以我認為最好確認英文原文或查看 Github,以獲取最新的資訊。

Azure 春云

Spring Cloud是为构建基于微服务的应用程序而设计的轻量级框架。它不仅适用于Spring Boot应用,还可以无缝集成到Spring应用中。

虽然不是太强调,但之前我们解释过,Key Vault 是用于引导的,而 App Configuration 是用于云的库。不太清楚在哪个方面,有什么明确的判断准则,但是 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有一个队列触发器,所以我只是出于兴趣想知道这个库的使用感受。

我希望通过StorageQueueOperation来处理队列操作,而不是对生存的Kue客户端进行DI。

由于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。我最近觉得这个世界真方便呢。如果遇到困难,就去看源代码吧。

广告
将在 10 秒后关闭
bannerAds