Getting Started
Architecture
NServiceBus
Persistence
ServiceInsight
ServicePulse
ServiceControl
Monitoring
Samples

Upgrade AmazonSQS Transport Version 3 to 4

MaxTTLDays renamed MaxTimeToLive

The MaxTTLDays method has been renamed to MaxTimeToLive and now takes a TimeSpan

var transport = endpointConfiguration.UseTransport<SqsTransport>();
transport.MaxTimeToLive(TimeSpan.FromDays(10));

Region

To specify a region, set the AWS_REGION environment variable or overload the client factory.

var transport = endpointConfiguration.UseTransport<SqsTransport>();
transport.ClientFactory(() => new AmazonSQSClient(
    new AmazonSQSConfig {
        RegionEndpoint = RegionEndpoint.APSoutheast2
    }));

Credential source

The SDK credential source is picked up automatically.

// picks up credentials as specified by the Amazon SDK
var transport = endpointConfiguration.UseTransport<SqsTransport>();

If desired, the credential source can be configured manually by overloading the client factory.

var transport = endpointConfiguration.UseTransport<SqsTransport>();
// SqsCredentialSource.InstanceProfile
transport.ClientFactory(() => new AmazonSQSClient(new InstanceProfileAWSCredentials()));
// SqsCredentialSource.EnvironmentVariables
transport.ClientFactory(() => new AmazonSQSClient(new EnvironmentVariablesAWSCredentials()));

Proxy

Previous versions automatically read the proxy username and password from NSERVICEBUS_AMAZONSQS_PROXY_AUTHENTICATION_USERNAME and NSERVICEBUS_AMAZONSQS_PROXY_AUTHENTICATION_PASSWORD, respectively. To achieve the same behavior, the client factory has to be overridden:

var userName = Environment.GetEnvironmentVariable("NSERVICEBUS_AMAZONSQS_PROXY_AUTHENTICATION_USERNAME");		
var password = Environment.GetEnvironmentVariable("NSERVICEBUS_AMAZONSQS_PROXY_AUTHENTICATION_PASSWORD");

var transport = endpointConfiguration.UseTransport<SqsTransport>();
transport.ClientFactory(() => new AmazonSQSClient(
    new AmazonSQSConfig { 
        ProxyCredentials = new NetworkCredential(userName, password),
        ProxyHost = "127.0.0.1", 
        ProxyPort = 8888 
    }));

S3 configuration

The ability to configure the S3 bucket and the key prefix has been moved to a dedicated configuration API for S3 related settings.

var transport = endpointConfiguration.UseTransport<SqsTransport>();
var s3Configuration = transport.S3("bucketname", "keyprefix");

Region

To specify a region, set the AWS_REGION environment variable or overload the client factory.

var transport = endpointConfiguration.UseTransport<SqsTransport>();
var s3Configuration = transport.S3(bucketName, keyPrefix);
s3Configuration.ClientFactory(() => new AmazonS3Client(
    new AmazonS3Config { 
        RegionEndpoint = RegionEndpoint.APSoutheast2
    }));

Credential source

The SDK credential source is picked up automatically.

var transport = endpointConfiguration.UseTransport<SqsTransport>();

// picks up credentials as specified by the Amazon SDK
var s3Configuration = transport.S3(bucketName, keyPrefix);

If desired, the credential source can be configured manually by overloading the client factory.

var transport = endpointConfiguration.UseTransport<SqsTransport>();
var s3Configuration = transport.S3(bucketName, keyPrefix);
// SqsCredentialSource.InstanceProfile
s3Configuration.ClientFactory(() => new AmazonS3Client(new InstanceProfileAWSCredentials()));
// or SqsCredentialSource.EnvironmentVariables
s3Configuration.ClientFactory(() => new AmazonS3Client(new EnvironmentVariablesAWSCredentials()));

Proxy

Previous versions automatically read the proxy username and password from NSERVICEBUS_AMAZONSQS_PROXY_AUTHENTICATION_USERNAME and NSERVICEBUS_AMAZONSQS_PROXY_AUTHENTICATION_PASSWORD, respectively. To achieve the same behavior, the client factory has to be overridden:

var userName = Environment.GetEnvironmentVariable("NSERVICEBUS_AMAZONSQS_PROXY_AUTHENTICATION_USERNAME");
var password = Environment.GetEnvironmentVariable("NSERVICEBUS_AMAZONSQS_PROXY_AUTHENTICATION_PASSWORD");

var transport = endpointConfiguration.UseTransport<SqsTransport>();
var s3Configuration = transport.S3(bucketName, keyPrefix);
s3Configuration.ClientFactory(() => new AmazonS3Client(
    new AmazonS3Config { 
        ProxyCredentials = new NetworkCredential(userName, password),
        ProxyHost = "127.0.0.1", 
        ProxyPort = 8888 
    }));

Native deferral

The native deferral API has been deprecated because the transport does not use the timeout manager, so native deferral cannot be disabled.

Unrestricted delayed delivery

By default, it is possible to send delays natively up to 15 min (900 seconds). A new unrestricted delayed delivery mechanism has been added to remove this restriction:

var transport = endpointConfiguration.UseTransport<SqsTransport>();
transport.UnrestrictedDurationDelayedDelivery();

Consult the delayed delivery documentation for more information.

Permissions

In addition to the previous permissions, the GetQueueAttributes permission is required to run SQS transport. The following permissions must be granted to run SQS transport.

SQS permissions

  • CreateQueue
  • DeleteMessage
  • DeleteMessageBatch
  • GetQueueUrl
  • ReceiveMessage
  • SendMessage
  • SendMessageBatch
  • SetQueueAttributes
  • GetQueueAttributes
  • ChangeMessageVisibility
  • ChangeMessageVisibilityBatch
  • PurgeQueue