1+ using ReardonTech . AzureServiceBusEmulator . Configuration . Model ;
2+
3+ namespace ReardonTech . AzureServiceBusEmulator . Configuration . Builders ;
4+
5+ /// <summary>
6+ /// Builder for an ASB Queue
7+ /// </summary>
8+ /// <param name="name"></param>
9+ public class AsbQueueBuilder ( string name )
10+ {
11+ private bool _deadLetteringOnMessageExpiration = false ;
12+ private string _defaultMessageTimeToLive = "PT1H" ;
13+ private string _duplicateDetectionHistoryTimeWindow = "PT20S" ;
14+ private string _forwardDeadLetteredMessagesTo = "" ;
15+ private string _forwardTo = "" ;
16+ private string _lockDuration = "PT1M" ;
17+ private int _maxDeliveryCount = 3 ;
18+ private bool _requiresDuplicateDetection = false ;
19+ private bool _requiresSession = false ;
20+
21+ /// <summary>
22+ /// Enable Dead lettering on Message Expiration
23+ /// </summary>
24+ /// <returns>ASB Queue Builder</returns>
25+ public AsbQueueBuilder DeadLetteringOnMessageExpiration ( bool deadLetteringOnMessageExpiration = true )
26+ {
27+ _deadLetteringOnMessageExpiration = deadLetteringOnMessageExpiration ;
28+ return this ;
29+ }
30+
31+ /// <summary>
32+ /// Require the use of AsbSessions
33+ /// </summary>
34+ /// <returns>ASB Queue Builder</returns>
35+ public AsbQueueBuilder RequireSessions ( bool requireSession = true )
36+ {
37+ _requiresSession = requireSession ;
38+ return this ;
39+ }
40+
41+ /// <summary>
42+ /// The default amount of time before the message is removed from the queue
43+ /// </summary>
44+ /// <param name="defaultMessageTimeToLive">The default amount of time before the message is removed from the queue.</param>
45+ /// <returns>ASB Queue Builder</returns>
46+ public AsbQueueBuilder DefaultMessageTimeToLive ( string defaultMessageTimeToLive = "PT1H" )
47+ {
48+ _defaultMessageTimeToLive = defaultMessageTimeToLive ;
49+ return this ;
50+ }
51+
52+ /// <summary>
53+ /// Detect duplicate messages inside of this time window
54+ /// </summary>
55+ /// <param name="duplicateDetectionHistoryTimeWindow"></param>
56+ /// <returns>ASB Queue Builder</returns>
57+ public AsbQueueBuilder DuplicateDetectionHistoryTimeWindow ( string duplicateDetectionHistoryTimeWindow = "PT20S" )
58+ {
59+ _duplicateDetectionHistoryTimeWindow = duplicateDetectionHistoryTimeWindow ;
60+ return this ;
61+ }
62+
63+ /// <summary>
64+ /// Set a queue to forward dead letters to
65+ /// </summary>
66+ /// <param name="forwardDeadLetteredMessagesTo">Queue to forward dead letters to</param>
67+ /// <returns>ASB Queue Builder</returns>
68+ public AsbQueueBuilder ForwardDeadLetteredMessagesTo ( string forwardDeadLetteredMessagesTo )
69+ {
70+ _forwardDeadLetteredMessagesTo = forwardDeadLetteredMessagesTo ;
71+ return this ;
72+ }
73+
74+ /// <summary>
75+ /// Queue to forward messags to
76+ /// </summary>
77+ /// <param name="forwardTo"></param>
78+ /// <returns>ASB Queue Builder</returns>
79+ public AsbQueueBuilder ForwardTo ( string forwardTo )
80+ {
81+ _forwardTo = forwardTo ;
82+ return this ;
83+ }
84+
85+ /// <summary>
86+ /// The amount of time before a lock expires
87+ /// </summary>
88+ /// <param name="lockDuration"></param>
89+ /// <returns>ASB Queue Builder</returns>
90+ public AsbQueueBuilder LockDuration ( string lockDuration = "PT1M" )
91+ {
92+ _lockDuration = lockDuration ;
93+ return this ;
94+ }
95+
96+ /// <summary>
97+ /// The maximum redelivers before the message is removed form the queue
98+ /// </summary>
99+ /// <param name="maxDeliveryCount"></param>
100+ /// <returns>ASB Queue Builder</returns>
101+ public AsbQueueBuilder MaxDeliveryCount ( int maxDeliveryCount )
102+ {
103+ _maxDeliveryCount = maxDeliveryCount ;
104+ return this ;
105+ }
106+
107+ /// <summary>
108+ /// Does the queue require duplication detection
109+ /// </summary>
110+ /// <param name="requiresDuplicateDetection">does the queue require duplication detection</param>
111+ /// <returns>ASB Queue Builder</returns>
112+ public AsbQueueBuilder RequiresDuplicateDetection ( bool requiresDuplicateDetection = true )
113+ {
114+ _requiresDuplicateDetection = requiresDuplicateDetection ;
115+ return this ;
116+ }
117+
118+ /// <summary>
119+ /// Build the Queue
120+ /// </summary>
121+ /// <returns>ASB Queue Configuration</returns>
122+ public AsbQueue Build ( ) => new AsbQueue ( name ,
123+ new AsbChannelProperties ( _deadLetteringOnMessageExpiration , _defaultMessageTimeToLive ,
124+ _duplicateDetectionHistoryTimeWindow , _forwardDeadLetteredMessagesTo , _forwardTo , _lockDuration ,
125+ _maxDeliveryCount , _requiresDuplicateDetection , _requiresSession ) ) ;
126+ }
0 commit comments