Skip to content

Commit 882980d

Browse files
committed
* Encode publish sequence number in x-dotnet-pub-seq-no as a long instead of ASCII string.
1 parent bfd5cd6 commit 882980d

File tree

3 files changed

+18
-16
lines changed

3 files changed

+18
-16
lines changed

projects/Applications/PublisherConfirms/PublisherConfirms.cs

Lines changed: 7 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@
5454
Persistent = true
5555
};
5656

57-
string hostname = "localhost";
57+
string hostname = "shostakovich";
5858
if (args.Length > 0)
5959
{
6060
if (false == string.IsNullOrWhiteSpace(args[0]))
@@ -278,29 +278,21 @@ async Task CleanOutstandingConfirms(ulong deliveryTag, bool multiple)
278278

279279
channel.BasicReturnAsync += (sender, ea) =>
280280
{
281-
string sequenceNumber = string.Empty;
281+
ulong sequenceNumber = 0;
282282

283283
IReadOnlyBasicProperties props = ea.BasicProperties;
284284
if (props.Headers is not null)
285285
{
286286
object? maybeSeqNum = props.Headers[Constants.PublishSequenceNumberHeader];
287-
if (maybeSeqNum is not null)
287+
if (maybeSeqNum is long longSequenceNumber)
288288
{
289-
switch (maybeSeqNum)
290-
{
291-
case byte[] seqNumBytes:
292-
sequenceNumber = Encoding.ASCII.GetString(seqNumBytes);
293-
break;
294-
case string seqNumStr:
295-
sequenceNumber = seqNumStr;
296-
break;
297-
}
289+
sequenceNumber = (ulong)longSequenceNumber;
298290
}
299291
}
300292

301293
Console.WriteLine($"{DateTime.Now} [INFO] message sequence number '{sequenceNumber}' has been basic.return-ed");
302-
ulong seq = ulong.Parse(sequenceNumber);
303-
return CleanOutstandingConfirms(seq, false);
294+
295+
return CleanOutstandingConfirms(sequenceNumber, false);
304296
};
305297

306298
channel.BasicAcksAsync += (sender, ea) => CleanOutstandingConfirms(ea.DeliveryTag, ea.Multiple);
@@ -346,7 +338,7 @@ async Task CleanOutstandingConfirms(ulong deliveryTag, bool multiple)
346338
Headers = new Dictionary<string, object?>()
347339
};
348340

349-
msgProps.Headers.Add(Constants.PublishSequenceNumberHeader, nextPublishSeqNo.ToString());
341+
msgProps.Headers.Add(Constants.PublishSequenceNumberHeader, (long)nextPublishSeqNo);
350342

351343
(ulong, ValueTask) data =
352344
(nextPublishSeqNo, channel.BasicPublishAsync(exchange: string.Empty, routingKey: rk, body: body, mandatory: true, basicProperties: msgProps));

projects/RabbitMQ.Client/Impl/Channel.BasicPublish.cs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -216,7 +216,14 @@ void MaybeAddPublishSequenceNumberToHeaders(IDictionary<string, object?> headers
216216
{
217217
if (_publisherConfirmationsEnabled && _publisherConfirmationTrackingEnabled)
218218
{
219-
headers[Constants.PublishSequenceNumberHeader] = publishSequenceNumber.ToString();
219+
if (publishSequenceNumber > long.MaxValue)
220+
{
221+
headers[Constants.PublishSequenceNumberHeader] = publishSequenceNumber.ToString();
222+
}
223+
else
224+
{
225+
headers[Constants.PublishSequenceNumberHeader] = (long)publishSequenceNumber;
226+
}
220227
}
221228
}
222229
}

projects/RabbitMQ.Client/Impl/Channel.PublisherConfirms.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -237,6 +237,9 @@ private void HandleReturn(BasicReturnEventArgs basicReturnEvent)
237237
{
238238
switch (maybeSeqNum)
239239
{
240+
case long seqNumLong:
241+
publishSequenceNumber = (ulong)seqNumLong;
242+
break;
240243
case string seqNumString:
241244
publishSequenceNumber = ulong.Parse(seqNumString);
242245
break;

0 commit comments

Comments
 (0)