Skip to main content
Version: v0.4.0

Securely Receive CloudEvents

The Arcus.BackgroundJobs.CloudEvents library provides a collection of background jobs to securely receive CloudEvents.

This allows workloads to asynchronously process event from other components without exposing a public endpoint.

How does it work?#

An Azure Service Bus Topic resource is required to receive CloudEvents on. CloudEvent messages on this Topic will be processed by a background job.

Automatically Invalidate Azure Key Vault Secrets

Usage#

The CloudEvents background job uses the Arcus Messaging functionality to receive messages. Make sure you take a look at the documentation on message handlers to fully grasp the possibilities.

The CloudEvent background job itself can be easily registered:

using Microsoft.Extensions.DependencyInjection;
public class Startup{    public void ConfigureServices(IServiceCollection services)    {        // Add CloudEvents background job with an namespace-scoped connection string.        services.AddCloudEventBackgroundJob(            topicName: "<your-topic>",            subscriptionNamePrefix: "Sub-",            serviceBusNamespaceConnectionStringSecretKey: "<secret-key-name-for-servicebus-namespace-connection-string>");
        // Add CloudEvent background job with an entity-scoped connection string.        services.AddCloudEventBackgroundJob(            subscriptionNamePrefix: "Sub-",            serviceBusTopicConnectionStringSecretKey: "<secret-key-name-for-servicebus-topic-connection-string>");
        // Add CloudEvent background job via Managed Identity        services.AddCloudEventBackgroundJobUsingManagedIdentity(            topicName: "<your-topic>",            subscriptionNamePrefix: "Sub-",            serviceBusNamespace: "<your-namespace>.servicebus.windows.net",            // The optional client id to authenticate for a user assigned managed identity. More information on user assigned managed identities cam be found here:            // https://docs.microsoft.com/en-us/azure/active-directory/managed-identities-azure-resources/overview#how-a-user-assigned-managed-identity-works-with-an-azure-vm            clientId: "<your-client-id>"        );    }}

To handle the incoming CloudEvents messages, you can register an custom IAzureServiceBusMessageHandler<CloudEvent> message handler instance:

using CloudNative.CloudEvents;using Microsoft.Extensions.DependencyInjection;
public class Startup{    public void ConfigureServices(IServiceCollection services)    {        services.AddCloudEventEventBackgroundJob(...)                .WithServiceBusMessageHandler<MyCloudEventMessageHandler, CloudEvent>();    }}

Such a custom implementation could look like this:

using Arcus.Messaging.Abstractions;using Arcus.Messaging.Abstractions.ServiceBus;using Arcus.Messaging.Abstractions.ServiceBus.MessageHandling;using CloudNative.CloudEvents;using Microsoft.Extensions.Logging;
public class MyCloudEventMessageHandler : IAzureServiceBusMessageHandler<CloudEvent>{    private readonly ILogger _logger;
    public MyCloudEventMessageHandler(ILogger<MyCloudEventMessageHandler> logger)    {        _logger = logger;    }
    public async Task ProcessMessageAsync(        CloudEvent message,        AzureServiceBusMessageContext messageContext,        MessageCorrelationInfo correlationInfo,        CancellationToken cancellationToken)    {        _logger.LogInformation("Processing CloudEvent message");    }}

โ† back