Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
<ItemGroup>
<PackageReference Include="Microsoft.Azure.Functions.Worker.Extensions.Http" Version="3.0.13" />
<PackageReference Include="NServiceBus.AzureFunctions.Worker.ServiceBus" Version="1.*" />
<PackageReference Include="Azure.Storage.Blobs" Version="12.*" />
</ItemGroup>

<ItemGroup Label="Resolves vulnerabilities">
Expand Down
36 changes: 34 additions & 2 deletions Snippets/ASBFunctionsWorker/ASBFunctionsWorker_1/Configuration.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
using Microsoft.Extensions.Hosting;
using NServiceBus;
using System;
using System.Threading.Tasks;
using Azure.Storage.Blobs;
using Microsoft.Extensions.Hosting;
using NServiceBus;

#region asb-function-isolated-configuration
[assembly: NServiceBusTriggerFunction("WorkerDemoEndpoint")]
Expand Down Expand Up @@ -37,6 +39,36 @@ public static Task Main()
#endregion
}

class EnableDiagnosticsBlob
{
public static Task Main()
{
var endpointName = "ASBWorkerEndpoint";

#region asb-function-iso-diagnostics-blob
var host = new HostBuilder()
.ConfigureFunctionsWorkerDefaults()
.UseNServiceBus(configuration =>
{
configuration.AdvancedConfiguration.CustomDiagnosticsWriter(async diagnostics =>
{
var connectionString = Environment.GetEnvironmentVariable("AzureWebJobsStorage");
var blobServiceClient = new BlobServiceClient(connectionString);

var containerClient = blobServiceClient.GetBlobContainerClient("diagnostics");
await containerClient.CreateIfNotExistsAsync();

var blobName = $"{DateTime.UtcNow:yyyy-MM-dd-HH-mm-ss-fff}-{endpointName}-configuration.txt";
var blobClient = containerClient.GetBlobClient(blobName);
await blobClient.UploadAsync(BinaryData.FromString(diagnostics));
});
})
.Build();
#endregion
return host.RunAsync();
}
}

class ConfigureErrorQueue
{
#region asb-function-isolated-configure-error-queue
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,17 @@
<ItemGroup>
<PackageReference Include="Microsoft.Azure.Functions.Worker.Extensions.Http" Version="3.0.13" />
<PackageReference Include="NServiceBus.AzureFunctions.Worker.ServiceBus" Version="2.*" />
<PackageReference Include="Azure.Storage.Blobs" Version="12.*" />
</ItemGroup>

<ItemGroup Label="Resolves vulnerabilities">
<PackageReference Include="Microsoft.IdentityModel.JsonWebTokens" Version="5.*" />
<PackageReference Include="System.Drawing.Common" Version="4.*" />
<PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="5.*" />
<PackageReference Include="System.Net.Http" Version="4.*" />
<PackageReference Include="System.Security.Cryptography.X509Certificates" Version="4.*" />
<PackageReference Include="System.Security.Cryptography.Xml" Version="4.*" />
<PackageReference Include="System.Text.RegularExpressions" Version="4.*" />
</ItemGroup>

</Project>
36 changes: 34 additions & 2 deletions Snippets/ASBFunctionsWorker/ASBFunctionsWorker_2/Configuration.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
using Microsoft.Extensions.Hosting;
using NServiceBus;
using System;
using System.Threading.Tasks;
using Azure.Storage.Blobs;
using Microsoft.Extensions.Hosting;
using NServiceBus;

#region asb-function-isolated-configuration
[assembly: NServiceBusTriggerFunction("WorkerDemoEndpoint")]
Expand Down Expand Up @@ -37,6 +39,36 @@ public static Task Main()
#endregion
}

class EnableDiagnosticsBlob
{
public static Task Main()
{
var endpointName = "ASBWorkerEndpoint";

#region asb-function-iso-diagnostics-blob
var host = new HostBuilder()
.ConfigureFunctionsWorkerDefaults()
.UseNServiceBus(configuration =>
{
configuration.AdvancedConfiguration.CustomDiagnosticsWriter(async diagnostics =>
{
var connectionString = Environment.GetEnvironmentVariable("AzureWebJobsStorage");
var blobServiceClient = new BlobServiceClient(connectionString);

var containerClient = blobServiceClient.GetBlobContainerClient("diagnostics");
await containerClient.CreateIfNotExistsAsync();

var blobName = $"{DateTime.UtcNow:yyyy-MM-dd-HH-mm-ss-fff}-{endpointName}-configuration.txt";
var blobClient = containerClient.GetBlobClient(blobName);
await blobClient.UploadAsync(BinaryData.FromString(diagnostics));
});
})
.Build();
#endregion
return host.RunAsync();
}
}

class ConfigureErrorQueue
{
#region asb-function-isolated-configure-error-queue
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
<ItemGroup>
<PackageReference Include="Microsoft.Azure.Functions.Worker.Extensions.Http" Version="3.0.13" />
<PackageReference Include="NServiceBus.AzureFunctions.Worker.ServiceBus" Version="3.*" />
<PackageReference Include="Azure.Storage.Blobs" Version="12.*" />
</ItemGroup>

<ItemGroup Label="Resolves vulnerabilities">
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
using Microsoft.Extensions.Hosting;
using Azure.Storage.Blobs;
using Microsoft.Extensions.Hosting;
using NServiceBus;
using System;
using System.Threading.Tasks;

#region asb-function-isolated-configuration
Expand Down Expand Up @@ -37,6 +39,36 @@ public static Task Main()
#endregion
}

class EnableDiagnosticsBlob
{
public static Task Main()
{
var endpointName = "ASBWorkerEndpoint";

#region asb-function-iso-diagnostics-blob
var host = new HostBuilder()
.ConfigureFunctionsWorkerDefaults()
.UseNServiceBus(configuration =>
{
configuration.AdvancedConfiguration.CustomDiagnosticsWriter(async diagnostics =>
{
var connectionString = Environment.GetEnvironmentVariable("AzureWebJobsStorage");
var blobServiceClient = new BlobServiceClient(connectionString);

var containerClient = blobServiceClient.GetBlobContainerClient("diagnostics");
await containerClient.CreateIfNotExistsAsync();

var blobName = $"{DateTime.UtcNow:yyyy-MM-dd-HH-mm-ss-fff}-{endpointName}-configuration.txt";
var blobClient = containerClient.GetBlobClient(blobName);
await blobClient.UploadAsync(BinaryData.FromString(diagnostics));
});
})
.Build();
#endregion
return host.RunAsync();
}
}

class ConfigureErrorQueue
{
#region asb-function-isolated-configure-error-queue
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Azure.Functions.Worker.Extensions.Http" Version="3.0.13" />
<PackageReference Include="Azure.Storage.Blobs" Version="12.*" />
<PackageReference Include="NServiceBus.AzureFunctions.Worker.ServiceBus" Version="4.*" />
</ItemGroup>
</Project>
37 changes: 35 additions & 2 deletions Snippets/ASBFunctionsWorker/ASBFunctionsWorker_4/Configuration.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
using Microsoft.Extensions.Hosting;
using NServiceBus;
using System;
using System.Threading.Tasks;
using Azure.Storage.Blobs;
using Microsoft.Extensions.Hosting;
using NServiceBus;

#region asb-function-isolated-configuration
[assembly: NServiceBusTriggerFunction("WorkerDemoEndpoint")]
Expand Down Expand Up @@ -37,6 +39,37 @@ public static Task Main()
#endregion
}

class EnableDiagnosticsBlob
{
public static Task Main()
{
var endpointName = "ASBWorkerEndpoint";

#region asb-function-iso-diagnostics-blob
var host = new HostBuilder()
.ConfigureFunctionsWorkerDefaults()
.UseNServiceBus(configuration =>
{
configuration.AdvancedConfiguration.CustomDiagnosticsWriter(async (diagnostics, cancellationToken) =>
{
var connectionString = Environment.GetEnvironmentVariable("AzureWebJobsStorage");
var blobServiceClient = new BlobServiceClient(connectionString);

var containerClient = blobServiceClient.GetBlobContainerClient("diagnostics");
await containerClient.CreateIfNotExistsAsync(cancellationToken: cancellationToken);

var blobName = $"{DateTime.UtcNow:yyyy-MM-dd-HH-mm-ss-fff}-{endpointName}-configuration.txt";
var blobClient = containerClient.GetBlobClient(blobName);
await blobClient.UploadAsync(BinaryData.FromString(diagnostics), cancellationToken);
});
})
.Build();
#endregion
return host.RunAsync();
}

}

class ConfigureErrorQueue
{
#region asb-function-isolated-configure-error-queue
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Azure.Functions.Worker.Extensions.Http" Version="3.1.0" />
<PackageReference Include="Azure.Storage.Blobs" Version="12.*" />
<PackageReference Include="NServiceBus.AzureFunctions.Worker.ServiceBus" Version="5.*" />
</ItemGroup>
</Project>
37 changes: 35 additions & 2 deletions Snippets/ASBFunctionsWorker/ASBFunctionsWorker_5/Configuration.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
using Microsoft.Extensions.Hosting;
using NServiceBus;
using System;
using System.Threading.Tasks;
using Azure.Storage.Blobs;
using Microsoft.Extensions.Hosting;
using NServiceBus;

#region asb-function-isolated-configuration
[assembly: NServiceBusTriggerFunction("WorkerDemoEndpoint")]
Expand Down Expand Up @@ -37,6 +39,37 @@ public static Task Main()
#endregion
}

class EnableDiagnosticsBlob
{
public static Task Main()
{
var endpointName = "ASBWorkerEndpoint";

#region asb-function-iso-diagnostics-blob
var host = new HostBuilder()
.ConfigureFunctionsWorkerDefaults()
.UseNServiceBus(configuration =>
{
configuration.AdvancedConfiguration.CustomDiagnosticsWriter(async (diagnostics, cancellationToken) =>
{
var connectionString = Environment.GetEnvironmentVariable("AzureWebJobsStorage");
var blobServiceClient = new BlobServiceClient(connectionString);

var containerClient = blobServiceClient.GetBlobContainerClient("diagnostics");
await containerClient.CreateIfNotExistsAsync(cancellationToken: cancellationToken);

var blobName = $"{DateTime.UtcNow:yyyy-MM-dd-HH-mm-ss-fff}-{endpointName}-configuration.txt";
var blobClient = containerClient.GetBlobClient(blobName);
await blobClient.UploadAsync(BinaryData.FromString(diagnostics), cancellationToken);
});
})
.Build();
#endregion
return host.RunAsync();
}

}

class ConfigureErrorQueue
{
#region asb-function-isolated-configure-error-queue
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Azure.Functions.Worker.Extensions.Http" Version="3.3.0" />
<PackageReference Include="Azure.Storage.Blobs" Version="12.*" />
<PackageReference Include="NServiceBus.AzureFunctions.Worker.ServiceBus" Version="6.0.0-beta.1" />
</ItemGroup>
</Project>
37 changes: 35 additions & 2 deletions Snippets/ASBFunctionsWorker/ASBFunctionsWorker_6/Configuration.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
using Microsoft.Extensions.Hosting;
using NServiceBus;
using System;
using System.Threading.Tasks;
using Azure.Storage.Blobs;
using Microsoft.Extensions.Hosting;
using NServiceBus;

#region asb-function-isolated-configuration
[assembly: NServiceBusTriggerFunction("WorkerDemoEndpoint")]
Expand Down Expand Up @@ -37,6 +39,37 @@ public static Task Main()
#endregion
}

class EnableDiagnosticsBlob
{
public static Task Main()
{
var endpointName = "ASBWorkerEndpoint";

#region asb-function-iso-diagnostics-blob
var host = new HostBuilder()
.ConfigureFunctionsWorkerDefaults()
.UseNServiceBus(configuration =>
{
configuration.AdvancedConfiguration.CustomDiagnosticsWriter(async (diagnostics, cancellationToken) =>
{
var connectionString = Environment.GetEnvironmentVariable("AzureWebJobsStorage");
var blobServiceClient = new BlobServiceClient(connectionString);

var containerClient = blobServiceClient.GetBlobContainerClient("diagnostics");
await containerClient.CreateIfNotExistsAsync(cancellationToken: cancellationToken);

var blobName = $"{DateTime.UtcNow:yyyy-MM-dd-HH-mm-ss-fff}-{endpointName}-configuration.txt";
var blobClient = containerClient.GetBlobClient(blobName);
await blobClient.UploadAsync(BinaryData.FromString(diagnostics), cancellationToken);
});
})
.Build();
#endregion
return host.RunAsync();
}

}

class ConfigureErrorQueue
{
#region asb-function-isolated-configure-error-queue
Expand Down
6 changes: 6 additions & 0 deletions nservicebus/hosting/azure-functions-service-bus/analyzers.md
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,12 @@ Starting in version 4.2, the Azure Functions host package comes with [Roslyn ana
* **Severity**:Error
* **Example message**: The NServiceBus endpoint address in Azure Functions is determined by the ServiceBusTrigger attribute.

### LogDiagnostics is not recommended in Azure Functions

* **Rule ID**: NSBWFUNC018
* **Severity**: Warning
* **Example message**: 'Use 'AdvancedConfiguration.CustomDiagnosticsWriter' for more control over diagnostics output.

## Options API

### RouteReplyToThisInstance is not supported
Expand Down
6 changes: 6 additions & 0 deletions nservicebus/hosting/azure-functions-service-bus/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,12 @@ snippet: asb-function-isolated-enable-diagnostics

Diagnostics data will be written with logger identification `StartupDiagnostics` with log level *Informational*.

#### Azure BLOB Storage

Diagnostic logs can be written to Azure BLOB Storage using `AdvancedConfiguration.CustomDiagnosticsWriter`.

snippet: asb-function-iso-diagnostics-blob

### Error queue

By default, repeatedly failing messages are sent to the `error` queue. The error queue can be configured or disabled completely to let the native Azure Service Bus dead-lettering configuration handle failures:
Expand Down
Loading