Aracılığıyla paylaş


Java işlevinizi Azure Depolama'ya bağlama

Azure İşlevleri, azure hizmetlerini ve diğer kaynakları kendi tümleştirme kodunuzu yazmak zorunda kalmadan işlevlere bağlamanıza olanak tanır. Hem girişi hem de çıkışı temsil eden bu bağlamalar işlev tanımı içinde bildirilir. Bağlamalardan alınan veriler işleve parametre olarak sağlanır. Tetikleyici, özel bir giriş bağlama türüdür. Bir işlevin yalnızca bir tetikleyicisi olsa da, birden çok giriş ve çıkış bağlaması olabilir. Daha fazla bilgi edinmek için bkz. tetikleyiciler ve bağlamalar kavramları Azure İşlevleri.

Bu makalede, önceki hızlı başlangıç makalesinde oluşturduğunuz işlevi bir Azure Depolama kuyruğuyla tümleştirme adımları gösterilmektedir. Bu işleve eklediğiniz çıkış bağlaması, bir HTTP isteğinden kuyruktaki bir iletiye veri yazar.

Bağlamaların çoğu, İşlevler'in bağlı hizmete erişmek için kullandığı depolanmış bir bağlantı dizesi gerektirir. Bu bağlantıyı kolaylaştırmak için işlev uygulamanızla oluşturduğunuz Depolama hesabını kullanırsınız. Bu hesaba bağlantı zaten adlı AzureWebJobsStoragebir uygulama ayarında depolanmış.

Önkoşullar

Bu makaleye başlamadan önce , Java hızlı başlangıcının 1. bölümündeki adımları tamamlayın.

İşlev uygulaması ayarlarını indirme

Azure'da gerekli Depolama hesabıyla birlikte zaten bir işlev uygulaması oluşturdunuz. Bu hesabın bağlantı dizesi Azure'daki uygulama ayarlarında güvenli bir şekilde depolanır. Bu makalede, iletileri aynı hesaptaki bir Depolama kuyruğuna yazarsınız. İşlevi yerel olarak çalıştırırken Depolama hesabınıza bağlanmak için uygulama ayarlarını local.settings.json dosyasına indirmeniz gerekir.

Projenin kökünden aşağıdaki Azure İşlevleri Core Tools komutunu çalıştırarak <APP_NAME> ayarları local.settings.json dosyasına indirin ve değerini önceki makaledeki işlev uygulamanızın adıyla değiştirin:

func azure functionapp fetch-app-settings <APP_NAME>

Azure hesabınızda oturum açmanız gerekebilir.

Önemli

Bu komut, Azure'daki işlev uygulamanızdaki değerlerle mevcut ayarların üzerine yazar.

Gizli diziler içerdiğinden local.settings.json dosyası hiçbir zaman yayımlanmaz ve kaynak denetimin dışında tutulmalıdır.

Depolama hesabı bağlantı dizesi olan değerine AzureWebJobsStorageihtiyacınız vardır. Çıkış bağlamasının beklendiği gibi çalıştığını doğrulamak için bu bağlantıyı kullanırsınız.

Uzantı paketlerini etkinleştirme

Bağlama uzantılarını yüklemenin en kolay yolu uzantı paketlerini etkinleştirmektir. Paketleri etkinleştirdiğinizde, önceden tanımlanmış bir uzantı paketi kümesi otomatik olarak yüklenir.

Uzantı paketlerini etkinleştirmek için host.json dosyasını açın ve içeriğini aşağıdaki kodla eşleşecek şekilde güncelleştirin:

{
    "version": "2.0",
    "extensionBundle": {
        "id": "Microsoft.Azure.Functions.ExtensionBundle",
        "version": "[3.*, 4.0.0)"
    }
}

Artık projenize Depolama çıkış bağlaması ekleyebilirsiniz.

Çıktı bağlaması ekleme

Java projesinde bağlamalar, işlev yönteminde bağlama ek açıklamaları olarak tanımlanır. Function.json dosyası daha sonra bu ek açıklamalara göre otomatik olarak oluşturulur.

src/main/java altında işlev kodunuzun konumuna göz atın, Function.java proje dosyasını açın ve yöntem tanımına aşağıdaki parametreyi run ekleyin:

@QueueOutput(name = "msg", queueName = "outqueue", connection = "AzureWebJobsStorage") OutputBinding<String> msg

msg parametresi, dize OutputBinding<T> koleksiyonunu temsil eden bir türdür. Bu dizeler, işlev tamamlandığında bir çıkış bağlamasına ileti olarak yazılır. Bu durumda, çıktı adlı outqueuebir depolama kuyruğudur. Depolama hesabının bağlantı dizesi yöntemi tarafından connection ayarlanır. Bağlantı dizesinin kendisini geçirmek yerine Depolama hesabı bağlantı dizesini içeren uygulama ayarını geçirirsiniz.

Yöntem run tanımı artık aşağıdaki örnekteki gibi görünmelidir:

@FunctionName("HttpTrigger-Java")
public HttpResponseMessage run(
        @HttpTrigger(name = "req", methods = {HttpMethod.GET, HttpMethod.POST}, authLevel = AuthorizationLevel.FUNCTION)  
        HttpRequestMessage<Optional<String>> request, 
        @QueueOutput(name = "msg", queueName = "outqueue", connection = "AzureWebJobsStorage") 
        OutputBinding<String> msg, final ExecutionContext context) {
    ...
}

Çıkış bağlaması kullanan kod ekleme

Artık işlev kodunuzdan çıkış bağlamasına yazmak için yeni msg parametresini kullanabilirsiniz. değerini çıkış bağlamasına eklemek namemsg için başarı yanıtının önüne aşağıdaki kod satırını ekleyin.

msg.setValue(name);

Çıkış bağlaması kullandığınızda kimlik doğrulaması, kuyruk başvurusu alma veya veri yazma için Azure Depolama SDK kodunu kullanmanız gerekmez. İşlevler çalışma zamanı ve kuyruk çıkış bağlaması bu görevleri sizin için yapar.

Yönteminiz run şimdi aşağıdaki örnekteki gibi görünmelidir:

public HttpResponseMessage run(
        @HttpTrigger(name = "req", methods = {HttpMethod.GET, HttpMethod.POST}, authLevel = AuthorizationLevel.ANONYMOUS) 
        HttpRequestMessage<Optional<String>> request, 
        @QueueOutput(name = "msg", queueName = "outqueue", 
        connection = "AzureWebJobsStorage") OutputBinding<String> msg, 
        final ExecutionContext context) {
    context.getLogger().info("Java HTTP trigger processed a request.");

    // Parse query parameter
    String query = request.getQueryParameters().get("name");
    String name = request.getBody().orElse(query);

    if (name == null) {
        return request.createResponseBuilder(HttpStatus.BAD_REQUEST)
        .body("Please pass a name on the query string or in the request body").build();
    } else {
        // Write the name to the message queue. 
        msg.setValue(name);

        return request.createResponseBuilder(HttpStatus.OK).body("Hello, " + name).build();
    }
}

Testleri güncelleştirme

Archetype bir dizi test oluşturduğundan, bu testleri yöntem imzasında run yeni msg parametreyi işleyecek şekilde güncelleştirmeniz gerekir.

src/test/java altında test kodunuzun konumuna göz atın, Function.java proje dosyasını açın ve altındaki //Invoke kod satırını aşağıdaki kodla değiştirin:

@SuppressWarnings("unchecked")
final OutputBinding<String> msg = (OutputBinding<String>)mock(OutputBinding.class);
final HttpResponseMessage ret = new Function().run(req, msg, context);

Artık yeni çıkış bağlamasını yerel olarak denemeye hazırsınız.

İşlevi yerel olarak çalıştırma

Daha önce olduğu gibi aşağıdaki komutu kullanarak projeyi derleyin ve İşlevler çalışma zamanını yerel olarak başlatın:

mvn clean package 
mvn azure-functions:run

Not

Host.json dosyasında uzantı paketlerini etkinleştirdiğinizden, Depolama bağlama uzantısı , diğer Microsoft bağlama uzantılarıyla birlikte başlangıç sırasında indirilip yüklendi.

Daha önce olduğu gibi, yeni bir terminal penceresinde cURL kullanarak komut satırından işlevi tetikleyin:

curl -w "\n" http://localhost:7071/api/HttpTrigger-Java --data AzureFunctions

Bu kez, çıkış bağlaması Depolama hesabınızda adlı outqueue bir kuyruk oluşturur ve aynı dizeye sahip bir ileti ekler.

Ardından, yeni kuyruğu görüntülemek ve bir iletinin eklendiğini doğrulamak için Azure CLI'yi kullanacaksınız. Ayrıca Microsoft Azure Depolama Gezgini kullanarak veya Azure portal kullanarak kuyruğunuzu görüntüleyebilirsiniz.

Depolama hesabı bağlantısını ayarlama

local.settings.json dosyasını açın ve Depolama hesabı bağlantı dizesi olan değerini AzureWebJobsStoragekopyalayın. AZURE_STORAGE_CONNECTION_STRING Bu Bash komutunu kullanarak ortam değişkenini bağlantı dizesine ayarlayın:

AZURE_STORAGE_CONNECTION_STRING="<STORAGE_CONNECTION_STRING>"

Ortam değişkeninde bağlantı dizesini ayarladığınızda AZURE_STORAGE_CONNECTION_STRING , her seferinde kimlik doğrulaması sağlamak zorunda kalmadan Depolama hesabınıza erişebilirsiniz.

Depolama kuyruğu sorgulama

Aşağıdaki örnekte olduğu az storage queue list gibi, hesabınızdaki Depolama kuyruklarını görüntülemek için komutunu kullanabilirsiniz:

az storage queue list --output tsv

Bu komutun çıktısı, işlev çalıştırıldığında oluşturulan kuyruk olan adlı outqueuebir kuyruk içerir.

Ardından, bu örnekte olduğu gibi bu kuyruktaki iletileri görüntülemek için komutunu kullanın az storage message peek :

echo `echo $(az storage message peek --queue-name outqueue -o tsv --query '[].{Message:content}') | base64 --decode`

Döndürülen dize, işlevi test etmek için gönderdiğiniz iletiyle aynı olmalıdır.

Not

Önceki örnek, base64'ten döndürülen dizenin kodunu çözer. Bunun nedeni Kuyruk depolama bağlamalarının Azure Depolama'ya base64 dizeleri olarak yazması ve okumasıdır.

Projeyi yeniden dağıtma

Yayımlanan uygulamanızı güncelleştirmek için aşağıdaki komutu yeniden çalıştırın:

mvn azure-functions:deploy

Yeniden, dağıtılan işlevi test etmek için cURL kullanabilirsiniz. Daha önce olduğu gibi, bu örnekte olduğu gibi POST isteğinin gövdesindeki değeri AzureFunctions URL'ye geçirin:

curl -w "\n" https://fabrikam-functions-20190929094703749.azurewebsites.net/api/HttpTrigger-Java?code=zYRohsTwBlZ68YF.... --data AzureFunctions

Çıktı bağlamasının kuyrukta beklendiği gibi yeni bir ileti oluşturduğunu doğrulamak için Depolama kuyruğu iletisini yeniden inceleyebilirsiniz.

Kaynakları temizleme

Bu koleksiyondaki diğer hızlı başlangıçlar, bu hızlı başlangıcı temel alır. Sonraki hızlı başlangıçlara veya öğreticilere devam etmek istiyorsanız, bu hızlı başlangıçta oluşturulan kaynakları temizlemeyin. Devam etmek istemiyorsanız, bu hızlı başlangıçta oluşturulan tüm kaynakları silmek için aşağıdaki komutu kullanın:

az group delete --name myResourceGroup

İstendiğinde öğesini seçin y .

Sonraki adımlar

HTTP ile tetiklenen işlevinizi depolama kuyruğuna veri yazacak şekilde güncelleştirdiniz. Java ile Azure İşlevleri geliştirme hakkında daha fazla bilgi edinmek için bkz. Azure İşlevleri Java geliştirici kılavuzu ve Azure İşlevleri tetikleyicileri ve bağlamaları. Java'daki tam İşlev projelerinin örnekleri için bkz. Java İşlevleri örnekleri.

Ardından işlev uygulamanız için Application Insights izlemeyi etkinleştirmeniz gerekir: