Aracılığıyla paylaş


JavaScript için Azure Event Grid istemci kitaplığı - sürüm 5.12.0

Azure Event Grid, büyük ölçekte güvenilir olay teslimi sağlayan bulut tabanlı bir hizmettir.

İstemci kitaplığını kullanarak:

  • Event Grid, Cloud Events 1.0 şemaları veya özel bir şema kullanarak Event Grid'e olay gönderme
  • Event Grid işleyicisine teslim edilen olayların kodunu çözme ve işleme
  • Event Grid için Paylaşılan Erişim İmzaları Oluşturma konuları

Önemli bağlantılar:

Başlarken

Şu anda desteklenen ortamlar

Daha fazla bilgi için bkz. destek ilkesi.

Önkoşullar

  • Azure aboneliği.
  • Mevcut bir Event Grid Konusu veya Etki Alanı. Kaynağı oluşturmanız gerekiyorsa Azure CLI veya Azure Portal'ı kullanabilirsiniz.

Azure CLI kullanıyorsanız <your-resource-group-name> ve <your-resource-name> kendi benzersiz adlarınızla değiştirin:

Event Grid Konusu Oluşturma

az eventgrid topic create --location <location> --resource-group <your-resource-group-name> --name <your-resource-name>

Event Grid Etki Alanı Oluşturma

az eventgrid domain create --location <location> --resource-group <your-resource-group-name> --name <your-resource-name>

@azure/eventgrid paketini yükleme

npmile JavaScript için Azure Event Grid istemci kitaplığını yükleyin:

npm install @azure/eventgrid

EventGridPublisherClient oluşturma ve kimlik doğrulaması

Event Grid API'sine erişmek üzere bir istemci nesnesi oluşturmak için Event Grid konunuzun endpoint ve bir credentialgerekir. Event Grid istemcisi, erişim anahtarından oluşturulmuş bir Erişim Anahtarı veya Paylaşılan Erişim İmzası (SAS) kullanabilir.

Event Grid konunuzun uç noktasını Azure Portal veya aşağıdaki Azure CLI parçacığını kullanarak bulabilirsiniz:

az eventgrid topic show --name <your-resource-name> --resource-group <your-resource-group-name> --query "endpoint"

Erişim Anahtarı Kullanma

Event Grid kaynağınıza göz atmak ve erişim anahtarı almak için azure portal kullanın veya aşağıdaki Azure CLI parçacığını kullanın:

az eventgrid topic key list --resource-group <your-resource-group-name> --name <your-event-grid-topic-name>

API anahtarınız ve uç noktanız olduktan sonra istemcinin kimliğini doğrulamak için AzureKeyCredential sınıfını aşağıdaki gibi kullanabilirsiniz:

import { EventGridPublisherClient, AzureKeyCredential } from "@azure/eventgrid";

const client = new EventGridPublisherClient(
  "<endpoint>",
  "EventGrid",
  new AzureKeyCredential("<Access Key>"),
);

SAS Belirteci Kullanma

Bir erişim anahtarı gibi SAS belirteci de event Grid konusuna olay gönderme erişimine izin verir. Yeniden oluşturulana kadar kullanılabilecek erişim anahtarının aksine, SAS belirtecinin bir harcama süresi vardır ve bu süre artık geçerli değildir. Kimlik doğrulaması için SAS belirteci kullanmak için aşağıdaki gibi AzureSASCredential kullanın:

import { EventGridPublisherClient, AzureSASCredential } from "@azure/eventgrid";

const client = new EventGridPublisherClient(
  "<endpoint>",
  "EventGrid",
  new AzureSASCredential("<SAS Token>"),
);

generateSharedAccessSigniture işlevini kullanarak sas belirteci oluşturabilirsiniz.

import { generateSharedAccessSignature, AzureKeyCredential } from "@azure/eventgrid";

// Create a SAS Token which expires on 2020-01-01 at Midnight.
const token = generateSharedAccessSignature(
  "<endpoint>",
  new AzureKeyCredential("<API key>"),
  new Date("2020-01-01T00:00:00"),
);

Azure Active Directory 'yi (AAD) kullanma

Azure EventGrid, isteklerin kimlik tabanlı kimlik doğrulaması için Azure Active Directory (Azure AD) ile tümleştirme sağlar. Azure AD ile rol tabanlı erişim denetimini (RBAC) kullanarak Azure Event Grid kaynaklarınıza kullanıcılara, gruplara veya uygulamalara erişim verebilirim.

olayları TokenCredentialolan bir konuya veya etki alanına göndermek için kimliği doğrulanmış kimlikte "EventGrid Veri Göndereni" rolü atanmış olmalıdır.

@azure/identity paketiyle hem geliştirme hem de üretim ortamlarındaki istekleri sorunsuz bir şekilde yetkilendirebilirsiniz. Azure Active Directory hakkında daha fazla bilgi edinmek için readme bölümüne bakın.

Örneğin, azure Active Directory kullanarak kimlik doğrulaması yapacak bir istemci oluşturmak için DefaultAzureCredential kullanabilir:

import { EventGridPublisherClient } from "@azure/eventgrid";
import { DefaultAzureCredential } from "@azure/identity";

const client = new EventGridPublisherClient(
  "<endpoint>",
  "CloudEvent",
  new DefaultAzureCredential(),
);

Temel kavramlar

EventGridPublisherClient

EventGridPublisherClient bir Event Grid Konusuna veya Event Grid Etki Alanına olay gönderirken kullanılır.

Olay Şemaları

Event Grid, olayları kodlamak için birden çok şemayı destekler. Özel Konu veya Etki Alanı oluşturulduğunda, olayları yayımlarken kullanılacak şemayı belirtirsiniz. Konunuzu özel şema kullanacak şekilde yapılandırabilirsiniz önceden tanımlanmış Event Grid şeması veya cloudEvents 1.0 şemasıdaha yaygındır. CloudEvents, olay verilerini ortak bir şekilde açıklamaya yönelik bir belirtim oluşturan bir Cloud Native Computing Foundation projesidir. EventGridPublisherClient'ı oluştururken konunuzun hangi şemayı kullanacak şekilde yapılandırıldığını belirtmeniz gerekir:

Konunuz Event Grid Şemasını kullanacak şekilde yapılandırılmışsa şema türü olarak "EventGrid" değerini ayarlayın:

import { EventGridPublisherClient } from "@azure/eventgrid";
import { DefaultAzureCredential } from "@azure/identity";

const client = new EventGridPublisherClient(
  "<endpoint>",
  "EventGrid",
  new DefaultAzureCredential(),
);

Konunuz Bulut Olay Şeması'nı kullanacak şekilde yapılandırılmışsa şema türü olarak "CloudEvent" değerini ayarlayın:

import { EventGridPublisherClient } from "@azure/eventgrid";
import { DefaultAzureCredential } from "@azure/identity";

const client = new EventGridPublisherClient(
  "<endpoint>",
  "CloudEvent",
  new DefaultAzureCredential(),
);

Konunuz Özel Olay Şeması kullanacak şekilde yapılandırılmışsa şema türü olarak "Özel" değerini ayarlayın:

import { EventGridPublisherClient } from "@azure/eventgrid";
import { DefaultAzureCredential } from "@azure/identity";

const client = new EventGridPublisherClient("<endpoint>", "Custom", new DefaultAzureCredential());

İstemcinin, konu başlığının beklenecek şekilde yapılandırıldığından farklı bir şemayla yapılandırılması hizmetten bir hataya neden olur ve olaylarınız yayımlanmaz.

Aşağıdaki Azure CLI parçacığını kullanarak Event Grid konusu için hangi giriş şemasının yapılandırıldığını görebilirsiniz:

az eventgrid topic show --name <your-resource-name> --resource-group <your-resource-group-name> --query "inputSchema"

EventGridDeserializer

Event Grid tarafından tüketicilere teslim edilen olaylar JSON olarak teslim edilir. Teslim edilen tüketici türüne bağlı olarak, Event Grid hizmeti tek bir yükün parçası olarak bir veya daha fazla olay teslim edebilir. Bu olaylar JSON.parsegibi normal JavaScript yöntemleri kullanılarak seri durumdan çıkarılsa da, bu kitaplık olayları seri durumdan çıkarma için EventGridDeserializeradlı bir yardımcı türü sunar.

JSON.parse doğrudan kullanmayla karşılaştırıldığında, EventGridDeserializer olayları seri durumdan çıkarma sırasında bazı ek dönüştürmeler yapar:

  1. EventGridDeserializer, bir olayın gerekli özelliklerinin mevcut olduğunu ve doğru türler olduğunu doğrular.
  2. EventGridDeserializer olay zamanı özelliğini JavaScript Date nesnesine dönüştürür.
  3. Bulut Olayları kullanılırken, bir olayın veri özelliği için ikili veriler kullanılabilir (Uint8Arraykullanılarak). Olay Event Grid aracılığıyla gönderildiğinde, Temel 64'te kodlanır. EventGridDeserializer bu verilerin kodunu bir Uint8Arrayörneğine geri çözer.
  4. Sistem Olayı (başka bir Azure hizmeti tarafından oluşturulan bir olay) kaldırıldığında EventGridDeserializer, data nesnesinin verilerini açıklayan ilgili arabirimle eşleşmesi için ek dönüştürmeler yapar. TypeScript kullanırken, bu arabirimler bir sistem olayı için veri nesnesinin özelliklerine erişirken güçlü yazma özelliğine sahip olduğunuzdan emin olun.

EventGridDeserializer örneğini oluştururken, data nesnesini daha fazla dönüştürmek için kullanılan özel seri durumdan çıkarıcılar sağlayabilirsiniz.

Dağıtılmış İzleme ve Bulut Olayları

Bu kitaplık, @azure/core-tracingkullanılarak dağıtılmış izlemeyi destekler. Dağıtılmış izleme kullanılırken, bu kitaplık bir send işlemi sırasında bir yayılma alanı oluşturur. Ayrıca, Bulut Olayları 1.0 şemasını kullanarak olay gönderirken SDK, Dağıtılmış İzleme uzantısınıkullanarak olaylara dağıtılmış izleme meta verileri ekler. traceparent ve tracestate uzantısı özelliklerinin değerleri, olayları gönderen HTTP isteğindeki traceparent ve tracestate üst bilgilerine karşılık gelir. Bir olay zaten bir traceparent uzantısı özelliğine sahipse güncelleştirilmez.

Kubernetes'te Event Grid

Bu kitaplık, Azure Arckullanılarak Kubernetes üzerinde test edilmiş ve doğrulanmıştır.

Örnekler

Event Grid Şemasını Kullanarak Bir Event Grid Konusuna Özel Olay Yayımlama

import { EventGridPublisherClient } from "@azure/eventgrid";
import { DefaultAzureCredential } from "@azure/identity";

const client = new EventGridPublisherClient(
  "<endpoint>",
  "EventGrid",
  new DefaultAzureCredential(),
);

await client.send([
  {
    eventType: "Azure.Sdk.SampleEvent",
    subject: "Event Subject",
    dataVersion: "1.0",
    data: {
      hello: "world",
    },
  },
]);

Event Grid Şemasını Kullanarak Event Grid Etki Alanındaki Bir Konuya Özel Olay Yayımlama

Olayları Event Grid Etki Alanına yayımlamak, Event Grid Konusuna yayımlamaya benzer, ancak olaylar için Event Grid şemasını kullanırken topic özelliğini eklemeniz gerekir. Cloud Events 1.0 şemasında olayları yayımlarken, gerekli source özelliği, etki alanında yayımlanması gereken konunun adı olarak kullanılır:

import { EventGridPublisherClient } from "@azure/eventgrid";
import { DefaultAzureCredential } from "@azure/identity";

const client = new EventGridPublisherClient(
  "<endpoint>",
  "EventGrid",
  new DefaultAzureCredential(),
);

await client.send([
  {
    topic: "my-sample-topic",
    eventType: "Azure.Sdk.SampleEvent",
    subject: "Event Subject",
    dataVersion: "1.0",
    data: {
      hello: "world",
    },
  },
]);

Bir Olayı Seri Durumdan Çıkarma

EventGridDeserializer, Event Grid tarafından teslim edilen olayların seri durumdan çıkarılması için kullanılabilir. Bu örnekte, EventGridDeserializer kullanılarak seri durumdan çıkarılmış bir bulut olayımız var ve bunların ne tür olaylar olduğunu algılamak için isSystemEvent kullanıyoruz.

import { EventGridDeserializer, isSystemEvent } from "@azure/eventgrid";

const deserializer = new EventGridDeserializer();
const message = {
  id: "5bc888aa-c2f4-11ea-b3de-0242ac130004",
  source:
    "/subscriptions/<subscriptionid>/resourceGroups/dummy-rg/providers/Microsoft.EventGrid/topics/dummy-topic",
  specversion: "1.0",
  type: "Microsoft.ContainerRegistry.ImagePushed",
  subject: "Test Subject",
  time: "2020-07-10T21:27:12.925Z",
  data: {
    hello: "world",
  },
};
const deserializedMessage = await deserializer.deserializeCloudEvents(message);
console.log(deserializedMessage);
if (
  deserializedMessage != null &&
  deserializedMessage.length !== 0 &&
  isSystemEvent("Microsoft.ContainerRegistry.ImagePushed", deserializedMessage[0])
) {
  console.log("This is a Microsoft.ContainerRegistry.ImagePushed event");
}

Sorun giderme

Günlük tutmak

Günlüğe kaydetmeyi etkinleştirmek, hatalarla ilgili yararlı bilgilerin ortaya çıkmasına yardımcı olabilir. HTTP isteklerinin ve yanıtlarının günlüğünü görmek için AZURE_LOG_LEVEL ortam değişkenini infoolarak ayarlayın. Alternatif olarak, setLogLevel@azure/logger çağrılarak günlükler çalışma zamanında etkinleştirilebilir:

import { setLogLevel } from "@azure/logger";

setLogLevel("info");

Günlükleri etkinleştirme hakkında daha ayrıntılı yönergeler için @azure/günlükçü paketi belgelerinebakabilirsiniz.

Sonraki adımlar

Bu kitaplığın nasıl kullanılacağına ilişkin ayrıntılı örnekler için lütfen örnekleri dizinine göz atın.

Katkıda

Bu kitaplığa katkıda bulunmak istiyorsanız kodu oluşturma ve test etme hakkında daha fazla bilgi edinmek için lütfen katkıda bulunma kılavuzu okuyun.

  • Javascript için Microsoft Azure SDK'sını