Hızlı Başlangıç: Java Dayanıklı İşlevler uygulaması oluşturma

Sunucusuz bir ortamda durum bilgisi olan işlevleri yazmak için Azure İşlevleri özelliği olan Dayanıklı İşlevler kullanın. Dayanıklı İşlevler uygulamanızdaki durumu, denetim noktalarını ve yeniden başlatmaları yönetir.

Bu hızlı başlangıçta Java'da bir "merhaba dünya" Dayanıklı İşlevler uygulaması oluşturup test edin.

En temel Dayanıklı İşlevler uygulamasının üç işlevi vardır:

  • Orchestrator işlevi: Diğer işlevleri düzenleyen bir iş akışı.
  • Etkinlik işlevi: Orchestrator işlevi tarafından çağrılan, iş gerçekleştiren ve isteğe bağlı olarak bir değer döndüren işlev.
  • İstemci işlevi: Azure'da düzenleyici işlevi başlatan normal bir işlevdir. Bu örnekte HTTP ile tetiklenen bir işlev kullanılır.

Bu hızlı başlangıçta bu "merhaba dünya" uygulamasını oluşturmanın farklı yolları açıklanmaktadır. Tercih ettiğiniz yaklaşımı ayarlamak için sayfanın üst kısmındaki seçiciyi kullanın.

Önkoşullar

Bu hızlı başlangıcı tamamlamak için şunlar gerekir:

  • Java Developer Kit sürüm 8 veya üzeri yüklü.

  • Apache Maven sürüm 3.0 veya üzeri yüklü.

  • Azure İşlevleri Core Tools'un en son sürümü.

    Azure İşlevleri 4.x için Core Tools sürüm 4.0.4915 veya üzeri gereklidir.

  • Verilerinizin güvenliğini sağlayan bir HTTP test aracı. Daha fazla bilgi için bkz . HTTP test araçları.

  • Azure aboneliği. Dayanıklı İşlevler kullanmak için bir Azure Depolama hesabınız olmalıdır.

Azure aboneliğiniz yoksa başlamadan önce birücretsiz Azure hesabı oluşturun.

Projenize gerekli bağımlılıkları ve eklentileri ekleme

pom.xml dosyanıza aşağıdaki kodu ekleyin:

<properties>
  <azure.functions.maven.plugin.version>1.18.0</azure.functions.maven.plugin.version>
  <azure.functions.java.library.version>3.0.0</azure.functions.java.library.version>
  <durabletask.azure.functions>1.0.0</durabletask.azure.functions>
  <functionAppName>your-unique-app-name</functionAppName>
</properties>

<dependencies>
  <dependency>
    <groupId>com.microsoft.azure.functions</groupId>
    <artifactId>azure-functions-java-library</artifactId>
    <version>${azure.functions.java.library.version}</version>
  </dependency>
  <dependency>
    <groupId>com.microsoft</groupId>
    <artifactId>durabletask-azure-functions</artifactId>
    <version>${durabletask.azure.functions}</version>
  </dependency>
</dependencies>

<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-compiler-plugin</artifactId>
      <version>3.8.1</version>
    </plugin>
    <plugin>
      <groupId>com.microsoft.azure</groupId>
      <artifactId>azure-functions-maven-plugin</artifactId>
      <version>${azure.functions.maven.plugin.version}</version>
      <configuration>
        <appName>${functionAppName}</appName>
        <resourceGroup>java-functions-group</resourceGroup>
        <appServicePlanName>java-functions-app-service-plan</appServicePlanName>
        <region>westus</region>
        <runtime>
          <os>windows</os>
          <javaVersion>11</javaVersion>
        </runtime>
        <appSettings>
          <property>
            <name>FUNCTIONS_EXTENSION_VERSION</name>
            <value>~4</value>
          </property>
        </appSettings>
      </configuration>
      <executions>
        <execution>
          <id>package-functions</id>
          <goals>
            <goal>package</goal>
          </goals>
        </execution>
      </executions>
    </plugin>
    <plugin>
      <artifactId>maven-clean-plugin</artifactId>
      <version>3.1.0</version>
    </plugin>
  </plugins>
</build>

Gerekli JSON dosyalarını ekleme

Proje dizininize bir host.json dosyası ekleyin. Aşağıdaki örneğe benzer görünmelidir:

{
  "version": "2.0",
  "logging": {
    "logLevel": {
      "DurableTask.AzureStorage": "Warning",
      "DurableTask.Core": "Warning"
    }
  },
  "extensions": {
    "durableTask": {
      "hubName": "JavaTestHub"
    }
  },
  "extensionBundle": {
    "id": "Microsoft.Azure.Functions.ExtensionBundle",
    "version": "[4.*, 5.0.0)"
  }
}

Not

Java için Dayanıklı İşlevler için şu anda yalnızca Azure İşlevleri v4 uzantı paketinin gerekli desteğe sahip olduğunu unutmayın. Java için Dayanıklı İşlevler v3 ve erken uzantı paketlerinde desteklenmez. Uzantı paketleri hakkında daha fazla bilgi için uzantı paketleri belgelerine bakın.

Dayanıklı İşlevler çalışma zamanı durumunu depolamak için bir depolama sağlayıcısı gerekir. Depolama sağlayıcısını yapılandırmak için proje dizininize bir local.settings.json dosyası ekleyin. Sağlayıcı olarak Azure Depolama'yı kullanmak için değerini AzureWebJobsStorage Azure Depolama hesabınızın bağlantı dizesi olarak ayarlayın:

{
  "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "<your storage account connection string>",
    "FUNCTIONS_WORKER_RUNTIME": "java"
  }
}

İşlevlerinizi oluşturma

Aşağıdaki örnek kod, her işlev türünün temel bir örneğini gösterir:

import com.microsoft.azure.functions.annotation.*;
import com.microsoft.azure.functions.*;
import java.util.*;

import com.microsoft.durabletask.*;
import com.microsoft.durabletask.azurefunctions.DurableActivityTrigger;
import com.microsoft.durabletask.azurefunctions.DurableClientContext;
import com.microsoft.durabletask.azurefunctions.DurableClientInput;
import com.microsoft.durabletask.azurefunctions.DurableOrchestrationTrigger;

public class DurableFunctionsSample {
    /**
     * This HTTP-triggered function starts the orchestration.
     */
    @FunctionName("StartOrchestration")
    public HttpResponseMessage startOrchestration(
            @HttpTrigger(name = "req", methods = {HttpMethod.GET, HttpMethod.POST}, authLevel = AuthorizationLevel.ANONYMOUS) HttpRequestMessage<Optional<String>> request,
            @DurableClientInput(name = "durableContext") DurableClientContext durableContext,
            final ExecutionContext context) {
        context.getLogger().info("Java HTTP trigger processed a request.");

        DurableTaskClient client = durableContext.getClient();
        String instanceId = client.scheduleNewOrchestrationInstance("Cities");
        context.getLogger().info("Created new Java orchestration with instance ID = " + instanceId);
        return durableContext.createCheckStatusResponse(request, instanceId);
    }

    /**
     * This is the orchestrator function, which can schedule activity functions, create durable timers,
     * or wait for external events in a way that's completely fault-tolerant.
     */
    @FunctionName("Cities")
    public String citiesOrchestrator(
            @DurableOrchestrationTrigger(name = "taskOrchestrationContext") TaskOrchestrationContext ctx) {
        String result = "";
        result += ctx.callActivity("Capitalize", "Tokyo", String.class).await() + ", ";
        result += ctx.callActivity("Capitalize", "London", String.class).await() + ", ";
        result += ctx.callActivity("Capitalize", "Seattle", String.class).await() + ", ";
        result += ctx.callActivity("Capitalize", "Austin", String.class).await();
        return result;
    }

    /**
     * This is the activity function that is invoked by the orchestrator function.
     */
    @FunctionName("Capitalize")
    public String capitalize(@DurableActivityTrigger(name = "name") String name, final ExecutionContext context) {
        context.getLogger().info("Capitalizing: " + name);
        return name.toUpperCase();
    }
}

Maven komutunu kullanarak yerel proje oluşturma

Dayanıklı İşlevler uygulamasının temel işlevlerini içeren bir proje oluşturmak için aşağıdaki komutu çalıştırın:

mvn archetype:generate -DarchetypeGroupId=com.microsoft.azure -DarchetypeArtifactId=azure-functions-archetype -DarchetypeVersion=1.51 -Dtrigger=durablefunctions

İstemlerde aşağıdaki bilgileri sağlayın:

İstem Eylem
groupId com.function girin.
artifactId myDurableFunction girin.
version 1.0-SNAPSHOT seçeneğini belirleyin.
paket com.function girin.
Y Onaylamak için Y girin ve Enter tuşuna basın.

Artık temel bir Dayanıklı İşlevler uygulamasında bulunan üç işleve sahip yerel bir projeniz var.

pom.xml dosyanızda bağımlılık olarak ayarlandığından com.microsoft:durabletask-azure-functions emin olun.

Arka uç depolama sağlayıcısını yapılandırma

Dayanıklı İşlevler çalışma zamanı durumunu depolamak için bir depolama sağlayıcısı gerekir. Azure Depolama'yı local.settings.json'da depolama sağlayıcısı olarak ayarlayabilirsiniz. Azure depolama hesabınızın bağlantı dizesi değerini şu örnekte olduğu AzureWebJobsStorage gibi kullanın:

{
  "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "<your storage account connection string>",
    "FUNCTIONS_WORKER_RUNTIME": "java"
  }
}

Yerel projenizi oluşturma

  1. Visual Studio Code'da komut paletini açmak için F1'i seçin (veya Ctrl/Cmd+Shift+P'yi seçin). İstemde ()> girin ve Azure İşlevleri: Yeni Proje Oluştur'u seçin.

    Yeni işlev projesi oluştur komutunun ekran görüntüsü.

  2. Göz At'ı seçin. Klasör Seç iletişim kutusunda, projeniz için kullanılacak klasöre gidin ve Seç'i seçin.

  3. İstemlerde aşağıdaki bilgileri sağlayın:

    İstem Eylem
    Dil seçin Java'ya tıklayın.
    Java sürümünü seçme Java 8 veya sonraki bir sürümü seçin. İşlevlerinizin Azure'da çalıştırıldığı Java sürümünü ve yerel olarak doğruladığınız sürümü seçin.
    Grup kimliği belirtin com.function girin.
    Yapıt kimliği sağlama myDurableFunction girin.
    Sürüm sağlama 1.0-SNAPSHOT girin.
    Paket adı belirtin com.function girin.
    Uygulama adı belirtin myDurableFunction girin.
    Java projesi için derleme aracını seçin Maven'ı seçin.
    Projenizi nasıl açmak istediğinizi seçin Yeni pencerede aç'ı seçin.

Artık örnek bir HTTP işlevine sahip bir projeniz var. bir sonraki adımda bir Dayanıklı İşlevler uygulamasının temel işlevlerini eklediğinizden, isterseniz bu işlevi kaldırabilirsiniz.

Projeye işlev ekleme

  1. Komut paletine girin ve Azure İşlevleri: İşlev Oluştur'u seçin.

  2. Şablon filtresini değiştir için Tümü'ne tıklayın.

  3. İstemlerde aşağıdaki bilgileri sağlayın:

    İstem Eylem
    İşleviniz için şablon seçme DurableFunctionsOrchestration öğesini seçin.
    Paket adı belirtin com.function girin.
    İşlev adı belirtin DurableFunctionsOrchestrator girin.
  4. İletişim kutusunda Depolama hesabı seçin'i seçerek bir depolama hesabı ayarlayın ve ardından istemleri izleyin.

Artık bir Dayanıklı İşlevler uygulaması için oluşturulan üç temel işleve sahip olmanız gerekir.

pom.xml ve host.json yapılandırma

pom.xml dosyanıza aşağıdaki bağımlılığı ekleyin:

<dependency>
  <groupId>com.microsoft</groupId>
  <artifactId>durabletask-azure-functions</artifactId>
  <version>1.0.0</version>
</dependency>

extensions özelliğini host.json dosyanıza ekleyin:

"extensions": { "durableTask": { "hubName": "JavaTestHub" }}

İşlevi yerel olarak test etme

Azure İşlevleri Temel Araçları, yerel geliştirme bilgisayarınızda bir Azure İşlevleri projesi çalıştırma olanağı sağlar.

Not

Java için Dayanıklı İşlevler için Azure İşlevleri Core Tools sürüm 4.0.4915 veya üzeri gerekir. Terminalde komutunu çalıştırarak hangi sürümün func --version yüklü olduğunu görebilirsiniz.

  1. Visual Studio Code kullanıyorsanız yeni bir terminal penceresi açın ve projeyi oluşturmak için aşağıdaki komutları çalıştırın:

    mvn clean package
    

    Ardından dayanıklı işlevini çalıştırın:

    mvn azure-functions:run
    
  2. Terminal panelinde HTTP ile tetiklenen işlevinizin URL uç noktasını kopyalayın.

    Azure yerel çıktısının ekran görüntüsü.

  3. URL uç noktasına HTTP POST isteği göndermek için bir HTTP test aracı kullanın.

    Yanıt aşağıdaki örneğe benzer görünmelidir:

    {
        "id": "d1b33a60-333f-4d6e-9ade-17a7020562a9",
        "purgeHistoryDeleteUri": "http://localhost:7071/runtime/webhooks/durabletask/instances/d1b33a60-333f-4d6e-9ade-17a7020562a9?code=ACCupah_QfGKo...",
        "sendEventPostUri": "http://localhost:7071/runtime/webhooks/durabletask/instances/d1b33a60-333f-4d6e-9ade-17a7020562a9/raiseEvent/{eventName}?code=ACCupah_QfGKo...",
        "statusQueryGetUri": "http://localhost:7071/runtime/webhooks/durabletask/instances/d1b33a60-333f-4d6e-9ade-17a7020562a9?code=ACCupah_QfGKo...",
        "terminatePostUri": "http://localhost:7071/runtime/webhooks/durabletask/instances/d1b33a60-333f-4d6e-9ade-17a7020562a9/terminate?reason={text}&code=ACCupah_QfGKo..."
    }
    

    Yanıt, HTTP işlevinin ilk sonucudur. Dayanıklı düzenlemenin başarıyla başladığını size bildirir. Henüz düzenlemenin sonunu görüntülemez. Yanıt birkaç yararlı URL içerir. Şimdilik düzenlemenin durumunu sorgula.

  4. url statusQueryGetUrideğerini kopyalayın, tarayıcınızın adres çubuğuna yapıştırın ve isteği yürütür. Alternatif olarak, GET isteğini vermek için HTTP test aracını kullanmaya devam edebilirsiniz.

    İstek, durum için düzenleme örneğini sorgular. Örneğin tamamlandığını ve bu örnekte olduğu gibi dayanıklı işlevin çıkışlarını veya sonuçlarını içerdiğini görmeniz gerekir:

    {
        "name": "Cities",
        "instanceId": "d1b33a60-333f-4d6e-9ade-17a7020562a9",
        "runtimeStatus": "Completed",
        "input": null,
        "customStatus": "",
        "output":"TOKYO, LONDON, SEATTLE, AUSTIN",
        "createdTime": "2022-12-12T05:00:02Z",
        "lastUpdatedTime": "2022-12-12T05:00:06Z"
    }