/// <summary> /// Initializes a new instance of the <see cref="AmqpSender"/> class. /// </summary> /// /// <param name="entityPath">The name of the entity to which messages will be sent.</param> /// <param name="connectionScope">The AMQP connection context for operations.</param> /// <param name="retryPolicy">The retry policy to consider when an operation fails.</param> /// /// <remarks> /// As an internal type, this class performs only basic sanity checks against its arguments. It /// is assumed that callers are trusted and have performed deep validation. /// /// Any parameters passed are assumed to be owned by this instance and safe to mutate or dispose; /// creation of clones or otherwise protecting the parameters is assumed to be the purview of the /// caller. /// </remarks> /// public AmqpSender( string entityPath, AmqpConnectionScope connectionScope, ServiceBusRetryPolicy retryPolicy) { Argument.AssertNotNullOrEmpty(entityPath, nameof(entityPath)); Argument.AssertNotNull(connectionScope, nameof(connectionScope)); Argument.AssertNotNull(retryPolicy, nameof(retryPolicy)); _entityPath = entityPath; _retryPolicy = retryPolicy; _connectionScope = connectionScope; _sendLink = new FaultTolerantAmqpObject <SendingAmqpLink>( timeout => CreateLinkAndEnsureSenderStateAsync(timeout, CancellationToken.None), link => { link.Session?.SafeClose(); link.SafeClose(); }); _managementLink = new FaultTolerantAmqpObject <RequestResponseAmqpLink>( timeout => _connectionScope.OpenManagementLinkAsync( _entityPath, timeout, CancellationToken.None), link => { link.Session?.SafeClose(); link.SafeClose(); }); }
/// <summary> /// Initializes a new instance of the <see cref="AmqpRuleManager"/> class. /// </summary> /// /// <param name="subscriptionPath">The path of the Service Bus subscription to which the rule manager is bound.</param> /// <param name="connectionScope">The AMQP connection context for operations.</param> /// <param name="retryPolicy">The retry policy to consider when an operation fails.</param> /// <param name="identifier">The identifier for the rule manager.</param> /// /// <remarks> /// As an internal type, this class performs only basic sanity checks against its arguments. It /// is assumed that callers are trusted and have performed deep validation. /// /// Any parameters passed are assumed to be owned by this instance and safe to mutate or dispose; /// creation of clones or otherwise protecting the parameters is assumed to be the purview of the /// caller. /// </remarks> public AmqpRuleManager( string subscriptionPath, AmqpConnectionScope connectionScope, ServiceBusRetryPolicy retryPolicy, string identifier) { Argument.AssertNotNullOrEmpty(subscriptionPath, nameof(subscriptionPath)); Argument.AssertNotNull(connectionScope, nameof(connectionScope)); Argument.AssertNotNull(retryPolicy, nameof(retryPolicy)); _subscriptionPath = subscriptionPath; _connectionScope = connectionScope; _retryPolicy = retryPolicy; _identifier = identifier; _managementLink = new FaultTolerantAmqpObject <RequestResponseAmqpLink>( timeout => _connectionScope.OpenManagementLinkAsync( _subscriptionPath, _identifier, timeout, CancellationToken.None), link => { link.Session?.SafeClose(); link.SafeClose(); }); }
private async Task <RequestResponseAmqpLink> OpenManagementLinkAsync( TimeSpan timeout) { RequestResponseAmqpLink link = await _connectionScope.OpenManagementLinkAsync( _entityPath, _identifier, timeout, CancellationToken.None).ConfigureAwait(false); link.Closed += OnManagementLinkClosed; return(link); }