Skip to content

Commit 15b4f21

Browse files
committed
* Restore IRecoveryConfiguration and IBackoffDelayPolicy
1 parent eec8afd commit 15b4f21

File tree

8 files changed

+259
-174
lines changed

8 files changed

+259
-174
lines changed

RabbitMQ.AMQP.Client/ConnectionSettings.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ public class ConnectionSettingsBuilder
2323
private string _virtualHost = "/";
2424
private uint _maxFrameSize = Consts.DefaultMaxFrameSize;
2525
private SaslMechanism _saslMechanism = Client.SaslMechanism.Anonymous;
26-
private RecoveryConfiguration _recoveryConfiguration = new RecoveryConfiguration();
26+
private IRecoveryConfiguration _recoveryConfiguration = new RecoveryConfiguration();
2727
private IList<Uri>? _uris;
2828

2929
public static ConnectionSettingsBuilder Create()
@@ -97,7 +97,7 @@ public ConnectionSettingsBuilder SaslMechanism(SaslMechanism saslMechanism)
9797
return this;
9898
}
9999

100-
public ConnectionSettingsBuilder RecoveryConfiguration(RecoveryConfiguration recoveryConfiguration)
100+
public ConnectionSettingsBuilder RecoveryConfiguration(IRecoveryConfiguration recoveryConfiguration)
101101
{
102102
_recoveryConfiguration = recoveryConfiguration;
103103
return this;
@@ -132,7 +132,7 @@ public class ConnectionSettings : IEquatable<ConnectionSettings>
132132
private readonly uint _maxFrameSize = Consts.DefaultMaxFrameSize;
133133
private readonly TlsSettings? _tlsSettings;
134134
private readonly SaslMechanism _saslMechanism = SaslMechanism.Plain;
135-
private readonly RecoveryConfiguration _recoveryConfiguration = new RecoveryConfiguration();
135+
private readonly IRecoveryConfiguration _recoveryConfiguration = new RecoveryConfiguration();
136136

137137
public ConnectionSettings(Uri uri)
138138
{
@@ -183,7 +183,7 @@ public ConnectionSettings(string scheme, string host, int port,
183183
string? user, string? password,
184184
string virtualHost, string containerId,
185185
SaslMechanism saslMechanism,
186-
RecoveryConfiguration recoveryConfiguration,
186+
IRecoveryConfiguration recoveryConfiguration,
187187
uint maxFrameSize = Consts.DefaultMaxFrameSize,
188188
TlsSettings? tlsSettings = null)
189189
{
@@ -223,7 +223,7 @@ public ConnectionSettings(string scheme, string host, int port,
223223
public uint MaxFrameSize => _maxFrameSize;
224224
public SaslMechanism SaslMechanism => _saslMechanism;
225225
public TlsSettings? TlsSettings => _tlsSettings;
226-
public RecoveryConfiguration Recovery => _recoveryConfiguration;
226+
public IRecoveryConfiguration Recovery => _recoveryConfiguration;
227227
public IEnumerable<Uri>? Uris => throw new NotImplementedException();
228228

229229
internal Address Address => _address;
Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
// This source code is dual-licensed under the Apache License, version 2.0,
2+
// and the Mozilla Public License, version 2.0.
3+
// Copyright (c) 2017-2024 Broadcom. All Rights Reserved. The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
4+
5+
namespace RabbitMQ.AMQP.Client
6+
{
7+
/// <summary>
8+
/// Interface for the backoff delay policy.
9+
/// Used during the recovery of the connection.
10+
/// </summary>
11+
public interface IBackOffDelayPolicy
12+
{
13+
/// <summary>
14+
/// Get the next delay in milliseconds.
15+
/// </summary>
16+
/// <returns></returns>
17+
int Delay();
18+
19+
/// <summary>
20+
/// Reset the backoff delay policy.
21+
/// </summary>
22+
void Reset();
23+
24+
/// <summary>
25+
/// Define if the backoff delay policy is active.
26+
/// Can be used to disable the backoff delay policy after a certain number of retries.
27+
/// or when the user wants to disable the backoff delay policy.
28+
/// </summary>
29+
bool IsActive();
30+
31+
int CurrentAttempt { get; }
32+
}
33+
34+
/// <summary>
35+
/// Class for the backoff delay policy.
36+
/// Used during the recovery of the connection.
37+
/// </summary>
38+
public class BackOffDelayPolicy : IBackOffDelayPolicy
39+
{
40+
private const int StartRandomMilliseconds = 500;
41+
private const int EndRandomMilliseconds = 1500;
42+
43+
private int _attempt = 1;
44+
private readonly int _maxAttempt = 12;
45+
46+
public BackOffDelayPolicy()
47+
{
48+
}
49+
50+
public BackOffDelayPolicy(int maxAttempt)
51+
{
52+
_maxAttempt = maxAttempt;
53+
}
54+
55+
/// <summary>
56+
/// Get the next delay in milliseconds.
57+
/// </summary>
58+
/// <returns></returns>
59+
public int Delay()
60+
{
61+
_attempt++;
62+
CurrentAttempt++;
63+
ResetAfterMaxAttempt();
64+
return Utils.RandomNext(StartRandomMilliseconds, EndRandomMilliseconds) * _attempt;
65+
}
66+
67+
/// <summary>
68+
/// Reset the backoff delay policy.
69+
/// </summary>
70+
public void Reset()
71+
{
72+
_attempt = 1;
73+
CurrentAttempt = 0;
74+
}
75+
76+
/// <summary>
77+
/// Define if the backoff delay policy is active.
78+
/// Can be used to disable the backoff delay policy after a certain number of retries.
79+
/// or when the user wants to disable the backoff delay policy.
80+
/// </summary>
81+
public bool IsActive()
82+
{
83+
return CurrentAttempt < _maxAttempt;
84+
}
85+
86+
public int CurrentAttempt { get; private set; } = 0;
87+
88+
public override string ToString()
89+
{
90+
return $"BackOffDelayPolicy{{ Attempt={_attempt}, TotalAttempt={CurrentAttempt}, IsActive={IsActive()} }}";
91+
}
92+
93+
private void ResetAfterMaxAttempt()
94+
{
95+
if (_attempt > 5)
96+
{
97+
_attempt = 1;
98+
}
99+
}
100+
}
101+
}
Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
// This source code is dual-licensed under the Apache License, version 2.0,
2+
// and the Mozilla Public License, version 2.0.
3+
// Copyright (c) 2017-2024 Broadcom. All Rights Reserved. The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
4+
5+
namespace RabbitMQ.AMQP.Client
6+
{
7+
/// <summary>
8+
/// Interface for the recovery configuration.
9+
/// </summary>
10+
public interface IRecoveryConfiguration
11+
{
12+
/// <summary>
13+
/// Define if the recovery is activated.
14+
/// If is not activated the connection will not try to reconnect.
15+
/// </summary>
16+
/// <param name="activated"></param>
17+
/// <returns></returns>
18+
IRecoveryConfiguration Activated(bool activated);
19+
20+
bool IsActivated();
21+
22+
/// <summary>
23+
/// Define the backoff delay policy.
24+
/// It is used when the connection is trying to reconnect.
25+
/// </summary>
26+
/// <param name="backOffDelayPolicy"></param>
27+
/// <returns></returns>
28+
IRecoveryConfiguration BackOffDelayPolicy(IBackOffDelayPolicy backOffDelayPolicy);
29+
30+
IBackOffDelayPolicy GetBackOffDelayPolicy();
31+
32+
/// <summary>
33+
/// Define if the recovery of the topology is activated.
34+
/// When Activated the connection will try to recover the topology after a reconnection.
35+
/// It is valid only if the recovery is activated.
36+
/// </summary>
37+
/// <param name="activated"></param>
38+
/// <returns></returns>
39+
IRecoveryConfiguration Topology(bool activated);
40+
41+
bool IsTopologyActive();
42+
}
43+
44+
/// <summary>
45+
/// RecoveryConfiguration is a class that represents the configuration of the recovery of the topology.
46+
/// It is used to configure the recovery of the topology of the server after a connection is established in case of a reconnection
47+
/// The RecoveryConfiguration can be disabled or enabled.
48+
/// If RecoveryConfiguration._active is disabled, the reconnect mechanism will not be activated.
49+
/// If RecoveryConfiguration._topology is disabled, the recovery of the topology will not be activated.
50+
/// </summary>
51+
public class RecoveryConfiguration : IRecoveryConfiguration
52+
{
53+
// Activate the reconnect mechanism
54+
private bool _active = true;
55+
56+
// Activate the recovery of the topology
57+
private bool _topology = false;
58+
59+
private IBackOffDelayPolicy _backOffDelayPolicy = new BackOffDelayPolicy();
60+
61+
/// <summary>
62+
/// Define if the recovery is activated.
63+
/// If is not activated the connection will not try to reconnect.
64+
/// </summary>
65+
/// <param name="activated"></param>
66+
/// <returns></returns>
67+
public IRecoveryConfiguration Activated(bool activated)
68+
{
69+
_active = activated;
70+
return this;
71+
}
72+
73+
public bool IsActivated()
74+
{
75+
return _active;
76+
}
77+
78+
/// <summary>
79+
/// Define the backoff delay policy.
80+
/// It is used when the connection is trying to reconnect.
81+
/// </summary>
82+
/// <param name="backOffDelayPolicy"></param>
83+
/// <returns></returns>
84+
public IRecoveryConfiguration BackOffDelayPolicy(IBackOffDelayPolicy backOffDelayPolicy)
85+
{
86+
_backOffDelayPolicy = backOffDelayPolicy;
87+
return this;
88+
}
89+
90+
public IBackOffDelayPolicy GetBackOffDelayPolicy()
91+
{
92+
return _backOffDelayPolicy;
93+
}
94+
95+
/// <summary>
96+
/// Define if the recovery of the topology is activated.
97+
/// When Activated the connection will try to recover the topology after a reconnection.
98+
/// It is valid only if the recovery is activated.
99+
/// </summary>
100+
/// <param name="activated"></param>
101+
/// <returns></returns>
102+
public IRecoveryConfiguration Topology(bool activated)
103+
{
104+
_topology = activated;
105+
return this;
106+
}
107+
108+
public bool IsTopologyActive()
109+
{
110+
return _topology;
111+
}
112+
113+
public override string ToString()
114+
{
115+
return
116+
$"RecoveryConfiguration{{ Active={_active}, Topology={_topology}, BackOffDelayPolicy={_backOffDelayPolicy} }}";
117+
}
118+
}
119+
}

RabbitMQ.AMQP.Client/Impl/AmqpConnection.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -446,7 +446,7 @@ void DoClose(Error? argError = null)
446446
// we have to check if the recovery is active.
447447
// The user may want to disable the recovery mechanism
448448
// the user can use the lifecycle callback to handle the error
449-
if (false == _connectionSettings.Recovery.IsActivate())
449+
if (false == _connectionSettings.Recovery.IsActivated())
450450
{
451451
DoClose();
452452
return;
@@ -457,7 +457,7 @@ void DoClose(Error? argError = null)
457457
OnNewStatus(State.Reconnecting, Utils.ConvertError(error));
458458
ChangeEntitiesStatus(State.Reconnecting, Utils.ConvertError(error));
459459

460-
BackOffDelayPolicy backOffDelayPolicy = _connectionSettings.Recovery.GetBackOffDelayPolicy();
460+
IBackOffDelayPolicy backOffDelayPolicy = _connectionSettings.Recovery.GetBackOffDelayPolicy();
461461
bool connected = false;
462462
// as first step we try to recover the connection
463463
// so the connected flag is false

RabbitMQ.AMQP.Client/PublicAPI.Unshipped.txt

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ RabbitMQ.AMQP.Client.BackOffDelayPolicy
3939
RabbitMQ.AMQP.Client.BackOffDelayPolicy.BackOffDelayPolicy() -> void
4040
RabbitMQ.AMQP.Client.BackOffDelayPolicy.BackOffDelayPolicy(int maxAttempt) -> void
4141
RabbitMQ.AMQP.Client.BackOffDelayPolicy.CurrentAttempt.get -> int
42+
RabbitMQ.AMQP.Client.BackOffDelayPolicy.Delay() -> int
4243
RabbitMQ.AMQP.Client.BackOffDelayPolicy.IsActive() -> bool
4344
RabbitMQ.AMQP.Client.BackOffDelayPolicy.Reset() -> void
4445
RabbitMQ.AMQP.Client.BadRequestException
@@ -56,15 +57,15 @@ RabbitMQ.AMQP.Client.ConnectionException
5657
RabbitMQ.AMQP.Client.ConnectionException.ConnectionException(string! message) -> void
5758
RabbitMQ.AMQP.Client.ConnectionException.ConnectionException(string! message, System.Exception! innerException) -> void
5859
RabbitMQ.AMQP.Client.ConnectionSettings
59-
RabbitMQ.AMQP.Client.ConnectionSettings.ConnectionSettings(string! scheme, string! host, int port, string? user, string? password, string! virtualHost, string! containerId, RabbitMQ.AMQP.Client.SaslMechanism! saslMechanism, RabbitMQ.AMQP.Client.RecoveryConfiguration! recoveryConfiguration, uint maxFrameSize = 0, RabbitMQ.AMQP.Client.TlsSettings? tlsSettings = null) -> void
60+
RabbitMQ.AMQP.Client.ConnectionSettings.ConnectionSettings(string! scheme, string! host, int port, string? user, string? password, string! virtualHost, string! containerId, RabbitMQ.AMQP.Client.SaslMechanism! saslMechanism, RabbitMQ.AMQP.Client.IRecoveryConfiguration! recoveryConfiguration, uint maxFrameSize = 0, RabbitMQ.AMQP.Client.TlsSettings? tlsSettings = null) -> void
6061
RabbitMQ.AMQP.Client.ConnectionSettings.ConnectionSettings(System.Uri! uri) -> void
6162
RabbitMQ.AMQP.Client.ConnectionSettings.ContainerId.get -> string!
6263
RabbitMQ.AMQP.Client.ConnectionSettings.Host.get -> string!
6364
RabbitMQ.AMQP.Client.ConnectionSettings.MaxFrameSize.get -> uint
6465
RabbitMQ.AMQP.Client.ConnectionSettings.Password.get -> string?
6566
RabbitMQ.AMQP.Client.ConnectionSettings.Path.get -> string!
6667
RabbitMQ.AMQP.Client.ConnectionSettings.Port.get -> int
67-
RabbitMQ.AMQP.Client.ConnectionSettings.Recovery.get -> RabbitMQ.AMQP.Client.RecoveryConfiguration!
68+
RabbitMQ.AMQP.Client.ConnectionSettings.Recovery.get -> RabbitMQ.AMQP.Client.IRecoveryConfiguration!
6869
RabbitMQ.AMQP.Client.ConnectionSettings.SaslMechanism.get -> RabbitMQ.AMQP.Client.SaslMechanism!
6970
RabbitMQ.AMQP.Client.ConnectionSettings.Scheme.get -> string!
7071
RabbitMQ.AMQP.Client.ConnectionSettings.TlsSettings.get -> RabbitMQ.AMQP.Client.TlsSettings?
@@ -80,7 +81,7 @@ RabbitMQ.AMQP.Client.ConnectionSettingsBuilder.Host(string! host) -> RabbitMQ.AM
8081
RabbitMQ.AMQP.Client.ConnectionSettingsBuilder.MaxFrameSize(uint maxFrameSize) -> RabbitMQ.AMQP.Client.ConnectionSettingsBuilder!
8182
RabbitMQ.AMQP.Client.ConnectionSettingsBuilder.Password(string! password) -> RabbitMQ.AMQP.Client.ConnectionSettingsBuilder!
8283
RabbitMQ.AMQP.Client.ConnectionSettingsBuilder.Port(int port) -> RabbitMQ.AMQP.Client.ConnectionSettingsBuilder!
83-
RabbitMQ.AMQP.Client.ConnectionSettingsBuilder.RecoveryConfiguration(RabbitMQ.AMQP.Client.RecoveryConfiguration! recoveryConfiguration) -> RabbitMQ.AMQP.Client.ConnectionSettingsBuilder!
84+
RabbitMQ.AMQP.Client.ConnectionSettingsBuilder.RecoveryConfiguration(RabbitMQ.AMQP.Client.IRecoveryConfiguration! recoveryConfiguration) -> RabbitMQ.AMQP.Client.ConnectionSettingsBuilder!
8485
RabbitMQ.AMQP.Client.ConnectionSettingsBuilder.SaslMechanism(RabbitMQ.AMQP.Client.SaslMechanism! saslMechanism) -> RabbitMQ.AMQP.Client.ConnectionSettingsBuilder!
8586
RabbitMQ.AMQP.Client.ConnectionSettingsBuilder.Scheme(string! scheme) -> RabbitMQ.AMQP.Client.ConnectionSettingsBuilder!
8687
RabbitMQ.AMQP.Client.ConnectionSettingsBuilder.Uris(System.Collections.Generic.IEnumerable<System.Uri!>! uris) -> RabbitMQ.AMQP.Client.ConnectionSettingsBuilder!
@@ -104,6 +105,11 @@ RabbitMQ.AMQP.Client.IAddressBuilder<T>.Exchange(string! exchangeName) -> T
104105
RabbitMQ.AMQP.Client.IAddressBuilder<T>.Key(string! key) -> T
105106
RabbitMQ.AMQP.Client.IAddressBuilder<T>.Queue(RabbitMQ.AMQP.Client.IQueueSpecification! queueSpec) -> T
106107
RabbitMQ.AMQP.Client.IAddressBuilder<T>.Queue(string! queueName) -> T
108+
RabbitMQ.AMQP.Client.IBackOffDelayPolicy
109+
RabbitMQ.AMQP.Client.IBackOffDelayPolicy.CurrentAttempt.get -> int
110+
RabbitMQ.AMQP.Client.IBackOffDelayPolicy.Delay() -> int
111+
RabbitMQ.AMQP.Client.IBackOffDelayPolicy.IsActive() -> bool
112+
RabbitMQ.AMQP.Client.IBackOffDelayPolicy.Reset() -> void
107113
RabbitMQ.AMQP.Client.IBindingSpecification
108114
RabbitMQ.AMQP.Client.IBindingSpecification.Argument(string! key, object! value) -> RabbitMQ.AMQP.Client.IBindingSpecification!
109115
RabbitMQ.AMQP.Client.IBindingSpecification.Arguments(System.Collections.Generic.Dictionary<string!, object!>! arguments) -> RabbitMQ.AMQP.Client.IBindingSpecification!
@@ -627,6 +633,13 @@ RabbitMQ.AMQP.Client.IQuorumQueueSpecification.DeadLetterStrategy(RabbitMQ.AMQP.
627633
RabbitMQ.AMQP.Client.IQuorumQueueSpecification.DeliveryLimit(int limit) -> RabbitMQ.AMQP.Client.IQuorumQueueSpecification!
628634
RabbitMQ.AMQP.Client.IQuorumQueueSpecification.Queue() -> RabbitMQ.AMQP.Client.IQueueSpecification!
629635
RabbitMQ.AMQP.Client.IQuorumQueueSpecification.QuorumInitialGroupSize(int size) -> RabbitMQ.AMQP.Client.IQuorumQueueSpecification!
636+
RabbitMQ.AMQP.Client.IRecoveryConfiguration
637+
RabbitMQ.AMQP.Client.IRecoveryConfiguration.Activated(bool activated) -> RabbitMQ.AMQP.Client.IRecoveryConfiguration!
638+
RabbitMQ.AMQP.Client.IRecoveryConfiguration.BackOffDelayPolicy(RabbitMQ.AMQP.Client.IBackOffDelayPolicy! backOffDelayPolicy) -> RabbitMQ.AMQP.Client.IRecoveryConfiguration!
639+
RabbitMQ.AMQP.Client.IRecoveryConfiguration.GetBackOffDelayPolicy() -> RabbitMQ.AMQP.Client.IBackOffDelayPolicy!
640+
RabbitMQ.AMQP.Client.IRecoveryConfiguration.IsActivated() -> bool
641+
RabbitMQ.AMQP.Client.IRecoveryConfiguration.IsTopologyActive() -> bool
642+
RabbitMQ.AMQP.Client.IRecoveryConfiguration.Topology(bool activated) -> RabbitMQ.AMQP.Client.IRecoveryConfiguration!
630643
RabbitMQ.AMQP.Client.IRpcClient
631644
RabbitMQ.AMQP.Client.IRpcClient.PublishAsync(RabbitMQ.AMQP.Client.IMessage! message, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task<RabbitMQ.AMQP.Client.IMessage!>!
632645
RabbitMQ.AMQP.Client.IRpcClientAddressBuilder
@@ -699,13 +712,13 @@ RabbitMQ.AMQP.Client.QuorumQueueDeadLetterStrategy
699712
RabbitMQ.AMQP.Client.QuorumQueueDeadLetterStrategy.AtLeastOnce = 1 -> RabbitMQ.AMQP.Client.QuorumQueueDeadLetterStrategy
700713
RabbitMQ.AMQP.Client.QuorumQueueDeadLetterStrategy.AtMostOnce = 0 -> RabbitMQ.AMQP.Client.QuorumQueueDeadLetterStrategy
701714
RabbitMQ.AMQP.Client.RecoveryConfiguration
702-
RabbitMQ.AMQP.Client.RecoveryConfiguration.Activated(bool activated) -> RabbitMQ.AMQP.Client.RecoveryConfiguration!
703-
RabbitMQ.AMQP.Client.RecoveryConfiguration.BackOffDelayPolicy(RabbitMQ.AMQP.Client.BackOffDelayPolicy! backOffDelayPolicy) -> RabbitMQ.AMQP.Client.RecoveryConfiguration!
704-
RabbitMQ.AMQP.Client.RecoveryConfiguration.GetBackOffDelayPolicy() -> RabbitMQ.AMQP.Client.BackOffDelayPolicy!
705-
RabbitMQ.AMQP.Client.RecoveryConfiguration.IsActivate() -> bool
715+
RabbitMQ.AMQP.Client.RecoveryConfiguration.Activated(bool activated) -> RabbitMQ.AMQP.Client.IRecoveryConfiguration!
716+
RabbitMQ.AMQP.Client.RecoveryConfiguration.BackOffDelayPolicy(RabbitMQ.AMQP.Client.IBackOffDelayPolicy! backOffDelayPolicy) -> RabbitMQ.AMQP.Client.IRecoveryConfiguration!
717+
RabbitMQ.AMQP.Client.RecoveryConfiguration.GetBackOffDelayPolicy() -> RabbitMQ.AMQP.Client.IBackOffDelayPolicy!
718+
RabbitMQ.AMQP.Client.RecoveryConfiguration.IsActivated() -> bool
706719
RabbitMQ.AMQP.Client.RecoveryConfiguration.IsTopologyActive() -> bool
707720
RabbitMQ.AMQP.Client.RecoveryConfiguration.RecoveryConfiguration() -> void
708-
RabbitMQ.AMQP.Client.RecoveryConfiguration.Topology(bool activated) -> RabbitMQ.AMQP.Client.RecoveryConfiguration!
721+
RabbitMQ.AMQP.Client.RecoveryConfiguration.Topology(bool activated) -> RabbitMQ.AMQP.Client.IRecoveryConfiguration!
709722
RabbitMQ.AMQP.Client.RpcHandler
710723
RabbitMQ.AMQP.Client.SaslMechanism
711724
RabbitMQ.AMQP.Client.SaslMechanism.Equals(RabbitMQ.AMQP.Client.SaslMechanism? other) -> bool
@@ -747,6 +760,5 @@ static RabbitMQ.AMQP.Client.InternalBugException.CreateAndThrow(string! message)
747760
static readonly RabbitMQ.AMQP.Client.SaslMechanism.Anonymous -> RabbitMQ.AMQP.Client.SaslMechanism!
748761
static readonly RabbitMQ.AMQP.Client.SaslMechanism.External -> RabbitMQ.AMQP.Client.SaslMechanism!
749762
static readonly RabbitMQ.AMQP.Client.SaslMechanism.Plain -> RabbitMQ.AMQP.Client.SaslMechanism!
750-
virtual RabbitMQ.AMQP.Client.BackOffDelayPolicy.Delay() -> int
751763
virtual RabbitMQ.AMQP.Client.Impl.AbstractLifeCycle.Dispose(bool disposing) -> void
752764
virtual RabbitMQ.AMQP.Client.Impl.AbstractLifeCycle.OpenAsync() -> System.Threading.Tasks.Task!

0 commit comments

Comments
 (0)