forked from zarusz/SlimMessageBus
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathSqsMessageBusSettings.cs
More file actions
145 lines (130 loc) · 6.36 KB
/
SqsMessageBusSettings.cs
File metadata and controls
145 lines (130 loc) · 6.36 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
namespace SlimMessageBus.Host.AmazonSQS;
public class SqsMessageBusSettings
{
/// <summary>
/// The factory method to create the client provider <see cref="ISqsClientProvider"/> which is used to manage the <see cref="AmazonSQSClient"/>.
/// </summary>
public Func<IServiceProvider, ISqsClientProvider> SqsClientProviderFactory { get; set; } = (svp) => new NullSqsClientProvider();
/// <summary>
/// The configuration for the SQS client.
/// </summary>
public AmazonSQSConfig SqsClientConfig { get; set; } = new();
/// <summary>
/// The factory method to create the client provider <see cref="ISnsClientProvider"/> which is used to manage the <see cref="AmazonSimpleNotificationServiceClient"/>.
/// </summary>
public Func<IServiceProvider, ISnsClientProvider> SnsClientProviderFactory { get; set; } = (svp) => new NullSnsClientProvider();
/// <summary>
/// The configuration for the SNS client.
/// </summary>
public AmazonSimpleNotificationServiceConfig SnsClientConfig { get; set; } = new();
/// <summary>
/// Serializer used to serialize SQS message header values.
/// By default the <see cref="DefaultSqsHeaderSerializer"/> is used.
/// </summary>
public ISqsHeaderSerializer<Amazon.SQS.Model.MessageAttributeValue> SqsHeaderSerializer { get; set; } = new DefaultSqsHeaderSerializer();
/// <summary>
/// Serializer used to serialize SNS message header values.
/// By default the <see cref="DefaultSnsHeaderSerializer"/> is used.
/// </summary>
public ISqsHeaderSerializer<Amazon.SimpleNotificationService.Model.MessageAttributeValue> SnsHeaderSerializer { get; set; } = new DefaultSnsHeaderSerializer();
/// <summary>
/// Settings for auto creation of queues if they don't exist.
/// </summary>
public SqsTopologySettings TopologyProvisioning { get; set; } = new();
/// <summary>
/// Maximum message count to be recieved by the consumer in one batch (1-10). Default is 10.
/// </summary>
public int MaxMessageCount { get; set; } = 10;
/// <summary>
/// Connect to AWS using ambient credentials that are pulled from the environment variables of the AWS host (e.g. Fargate, ECS, EC2, etc.).
/// </summary>
/// <param name="mode">Should the credentials apply for SQS or SNS service (or both)</param>
/// <returns></returns>
public SqsMessageBusSettings UseAmbientCredentials(SqsMessageBusModes mode = SqsMessageBusModes.All)
{
if ((mode & SqsMessageBusModes.Sqs) != 0)
{
SqsClientProviderFactory = (svp) => new AmbientCredentialsSqsClientProvider(SqsClientConfig);
}
if ((mode & SqsMessageBusModes.Sns) != 0)
{
SnsClientProviderFactory = (svp) => new AmbientCredentialsSnsClientProvider(SnsClientConfig);
}
return this;
}
/// <summary>
/// Connect to AWS using long term credentials.
/// See https://docs.aws.amazon.com/sdkref/latest/guide/access-iam-users.html
/// </summary>
/// <param name="accessKey"></param>
/// <param name="secretKey"></param>
/// <param name="mode">Should the credentials apply for SQS or SNS service (or both)</param>
/// <returns></returns>
[Obsolete("The method has been renamed to .UseStaticCredentials()")]
public SqsMessageBusSettings UseCredentials(string accessKey, string secretKey, SqsMessageBusModes mode = SqsMessageBusModes.All)
=> UseStaticCredentials(accessKey, secretKey, mode);
/// <summary>
/// Connect to AWS using long term credentials.
/// See https://docs.aws.amazon.com/sdkref/latest/guide/access-iam-users.html
/// </summary>
/// <param name="accessKey"></param>
/// <param name="secretKey"></param>
/// <param name="mode">Should the credentials apply for SQS or SNS service (or both)</param>
/// <returns></returns>
public SqsMessageBusSettings UseStaticCredentials(string accessKey, string secretKey, SqsMessageBusModes mode = SqsMessageBusModes.All)
{
var credentials = new BasicAWSCredentials(accessKey, secretKey);
if ((mode & SqsMessageBusModes.Sqs) != 0)
{
SqsClientProviderFactory = (svp) => new StaticCredentialsSqsClientProvider(SqsClientConfig, credentials);
}
if ((mode & SqsMessageBusModes.Sns) != 0)
{
SnsClientProviderFactory = (svp) => new StaticCredentialsSnsClientProvider(SnsClientConfig, credentials);
}
return this;
}
/// <summary>
/// Connect to AWS using temporary credentials (recommended)
/// See https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_use-resources.html#RequestWithSTS
/// </summary>
/// <param name="roleArn"></param>
/// <param name="roleSessionName"></param>
/// <param name="mode">Should the credentials apply for SQS or SNS service (or both)</param>
/// <returns></returns>
public SqsMessageBusSettings UseTemporaryCredentials(string roleArn, string roleSessionName, SqsMessageBusModes mode = SqsMessageBusModes.All)
{
if ((mode & SqsMessageBusModes.Sqs) != 0)
{
SqsClientProviderFactory = (svp) => new TemporaryCredentialsSqsClientProvider(SqsClientConfig, roleArn, roleSessionName);
}
if ((mode & SqsMessageBusModes.Sns) != 0)
{
SnsClientProviderFactory = (svp) => new TemporaryCredentialsSnsClientProvider(SnsClientConfig, roleArn, roleSessionName);
}
return this;
}
/// <summary>
/// Sets the region for the SQS and SNS client.
/// </summary>
/// <param name="region"></param>
/// <param name="mode">Should the credentials apply for SQS or SNS service (or both)</param>
/// <returns></returns>
public SqsMessageBusSettings UseRegion(RegionEndpoint region, SqsMessageBusModes mode = SqsMessageBusModes.All)
{
if ((mode & SqsMessageBusModes.Sqs) != 0)
{
SqsClientConfig.RegionEndpoint = region;
}
if ((mode & SqsMessageBusModes.Sns) != 0)
{
SnsClientConfig.RegionEndpoint = region;
}
return this;
}
public SqsMessageBusSettings()
{
// If not specified assume the ambient credentials are used.
UseAmbientCredentials(SqsMessageBusModes.All);
}
}