-
Notifications
You must be signed in to change notification settings - Fork 36
/
IMqttProducerEndpointBuilder.cs
217 lines (200 loc) · 9.99 KB
/
IMqttProducerEndpointBuilder.cs
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
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
// Copyright (c) 2020 Sergio Aquilini
// This code is licensed under MIT license (see LICENSE file for details)
using System;
using MQTTnet.Protocol;
using Silverback.Messaging.Messages;
using Silverback.Messaging.Outbound.Routing;
namespace Silverback.Messaging.Configuration.Mqtt
{
/// <summary>
/// Builds the <see cref="MqttProducerEndpoint" />.
/// </summary>
public interface IMqttProducerEndpointBuilder : IProducerEndpointBuilder<IMqttProducerEndpointBuilder>
{
/// <summary>
/// Specifies the name of the topic.
/// </summary>
/// <param name="topicName">
/// The name of the topic.
/// </param>
/// <returns>
/// The <see cref="IMqttProducerEndpointBuilder" /> so that additional calls can be chained.
/// </returns>
IMqttProducerEndpointBuilder ProduceTo(string topicName);
/// <summary>
/// Specifies the name of the topic and optionally the target partition.
/// </summary>
/// <param name="topicNameFunction">
/// The function returning the topic name for the message being produced. If the function returns
/// <c>null</c> the message will not be produced.
/// </param>
/// <returns>
/// The <see cref="IMqttProducerEndpointBuilder" /> so that additional calls can be chained.
/// </returns>
IMqttProducerEndpointBuilder ProduceTo(Func<IOutboundEnvelope, string?> topicNameFunction);
/// <summary>
/// Specifies the name of the topic and optionally the target partition.
/// </summary>
/// <typeparam name="TMessage">
/// The type of the messages being produced.
/// </typeparam>
/// <param name="topicNameFunction">
/// The function returning the topic name for the message being produced. If the function returns
/// <c>null</c> the message will not be produced.
/// </param>
/// <returns>
/// The <see cref="IMqttProducerEndpointBuilder" /> so that additional calls can be chained.
/// </returns>
IMqttProducerEndpointBuilder ProduceTo<TMessage>(
Func<IOutboundEnvelope<TMessage>, string?> topicNameFunction)
where TMessage : class;
/// <summary>
/// Specifies the name of the topic and optionally the target partition.
/// </summary>
/// <param name="topicNameFunction">
/// The function returning the topic name for the message being produced. If the function returns
/// <c>null</c> the message will not be produced.
/// </param>
/// <returns>
/// The <see cref="IMqttProducerEndpointBuilder" /> so that additional calls can be chained.
/// </returns>
IMqttProducerEndpointBuilder ProduceTo(
Func<IOutboundEnvelope, IServiceProvider, string?> topicNameFunction);
/// <summary>
/// Specifies the name of the topic and optionally the target partition.
/// </summary>
/// <typeparam name="TMessage">
/// The type of the messages being produced.
/// </typeparam>
/// <param name="topicNameFunction">
/// The function returning the topic name for the message being produced. If the function returns
/// <c>null</c> the message will not be produced.
/// </param>
/// <returns>
/// The <see cref="IMqttProducerEndpointBuilder" /> so that additional calls can be chained.
/// </returns>
IMqttProducerEndpointBuilder ProduceTo<TMessage>(
Func<IOutboundEnvelope<TMessage>, IServiceProvider, string?> topicNameFunction)
where TMessage : class;
/// <summary>
/// Specifies the name of the topic and optionally the target partition.
/// </summary>
/// <param name="topicNameFormatString">
/// The endpoint name format string that will be combined with the arguments returned by the
/// <paramref name="topicNameArgumentsFunction" /> using a <c>string.Format</c>.
/// </param>
/// <param name="topicNameArgumentsFunction">
/// The function returning the arguments to be used to format the string.
/// </param>
/// <returns>
/// The <see cref="IMqttProducerEndpointBuilder" /> so that additional calls can be chained.
/// </returns>
IMqttProducerEndpointBuilder ProduceTo(
string topicNameFormatString,
Func<IOutboundEnvelope, string[]> topicNameArgumentsFunction);
/// <summary>
/// Specifies the name of the topic and optionally the target partition.
/// </summary>
/// <typeparam name="TMessage">
/// The type of the messages being produced.
/// </typeparam>
/// <param name="topicNameFormatString">
/// The endpoint name format string that will be combined with the arguments returned by the
/// <paramref name="topicNameArgumentsFunction" /> using a <c>string.Format</c>.
/// </param>
/// <param name="topicNameArgumentsFunction">
/// The function returning the arguments to be used to format the string.
/// </param>
/// <returns>
/// The <see cref="IMqttProducerEndpointBuilder" /> so that additional calls can be chained.
/// </returns>
IMqttProducerEndpointBuilder ProduceTo<TMessage>(
string topicNameFormatString,
Func<IOutboundEnvelope<TMessage>, string[]> topicNameArgumentsFunction)
where TMessage : class;
/// <summary>
/// Specifies the type of the <see cref="IProducerEndpointNameResolver" /> to be used to resolve the
/// actual endpoint name and partition.
/// </summary>
/// <typeparam name="TResolver">
/// The type of the <see cref="IProducerEndpointNameResolver" /> to be used.
/// </typeparam>
/// <returns>
/// The <see cref="IMqttProducerEndpointBuilder" /> so that additional calls can be chained.
/// </returns>
IMqttProducerEndpointBuilder UseEndpointNameResolver<TResolver>()
where TResolver : IProducerEndpointNameResolver;
/// <summary>
/// Configures the MQTT client properties.
/// </summary>
/// <param name="configAction">
/// An <see cref="Action{T}" /> that takes the <see cref="MqttClientConfig" /> and configures it.
/// </param>
/// <returns>
/// The <see cref="IMqttProducerEndpointBuilder" /> so that additional calls can be chained.
/// </returns>
IMqttProducerEndpointBuilder Configure(Action<MqttClientConfig> configAction);
/// <summary>
/// Configures the MQTT client properties.
/// </summary>
/// <param name="configBuilderAction">
/// An <see cref="Action{T}" /> that takes the <see cref="IMqttClientConfigBuilder" /> and configures it.
/// </param>
/// <returns>
/// The <see cref="IMqttProducerEndpointBuilder" /> so that additional calls can be chained.
/// </returns>
IMqttProducerEndpointBuilder Configure(Action<IMqttClientConfigBuilder> configBuilderAction);
/// <summary>
/// Specifies the desired quality of service level.
/// </summary>
/// t
/// <param name="qosLevel">
/// The <see cref="MqttQualityOfServiceLevel" />.
/// </param>
/// <returns>
/// The <see cref="IMqttProducerEndpointBuilder" /> so that additional calls can be chained.
/// </returns>
IMqttProducerEndpointBuilder WithQualityOfServiceLevel(MqttQualityOfServiceLevel qosLevel);
/// <summary>
/// Specifies that the messages have to be sent with the <i>at most once</i> quality of service level.
/// </summary>
/// <returns>
/// The <see cref="IMqttProducerEndpointBuilder" /> so that additional calls can be chained.
/// </returns>
IMqttProducerEndpointBuilder WithAtMostOnceQoS();
/// <summary>
/// Specifies that the messages have to be sent with the <i>at least once</i> quality of service level.
/// </summary>
/// <returns>
/// The <see cref="IMqttProducerEndpointBuilder" /> so that additional calls can be chained.
/// </returns>
IMqttProducerEndpointBuilder WithAtLeastOnceQoS();
/// <summary>
/// Specifies that the messages have to be sent with the <i>exactly once</i> quality of service level.
/// </summary>
/// <returns>
/// The <see cref="IMqttProducerEndpointBuilder" /> so that additional calls can be chained.
/// </returns>
IMqttProducerEndpointBuilder WithExactlyOnceQoS();
/// <summary>
/// Specifies that the messages have to be sent with the retain flag, causing them to be persisted on the
/// broker.
/// </summary>
/// <returns>
/// The <see cref="IMqttProducerEndpointBuilder" /> so that additional calls can be chained.
/// </returns>
IMqttProducerEndpointBuilder Retain();
/// <summary>
/// Sets the message expiry interval. This interval defines the period of time that the broker stores
/// the <i>PUBLISH</i> message for any matching subscribers that are not currently connected. When no
/// message expiry interval is set, the broker must store the message for matching subscribers indefinitely.
/// </summary>
/// <param name="messageExpiryInterval">
/// The <see cref="TimeSpan" /> representing the message expiry interval.
/// </param>
/// <returns>
/// The <see cref="IMqttProducerEndpointBuilder" /> so that additional calls can be chained.
/// </returns>
IMqttProducerEndpointBuilder WithMessageExpiration(TimeSpan messageExpiryInterval);
}
}