public async Task <IAnonymousProducer> CreateAnonymousProducerAsync(AnonymousProducerConfiguration configuration, CancellationToken cancellationToken = default) { var autoRecoveringAnonymousProducer = new AutoRecoveringAnonymousProducer(_loggerFactory, configuration); await PrepareRecoverable(autoRecoveringAnonymousProducer, cancellationToken); return(autoRecoveringAnonymousProducer); }
/// <summary> /// Adds the <see cref="IAnonymousProducer"/> and configures a binding between the <typeparam name="TProducer" /> and named <see cref="IProducer"/> instance. /// </summary> /// <param name="builder">The <see cref="IActiveMqBuilder"/>.</param> /// <param name="producerOptions">The <see cref="IAnonymousProducer"/> configuration.</param> /// <param name="producerLifetime">The lifetime with which to register the <typeparam name="TProducer" /> in the container.</param> /// <typeparam name="TProducer">The type of the typed producer. The type specified will be registered in the service collection as /// a transient service by default.</typeparam> /// <returns>The <see cref="IActiveMqBuilder"/> that can be used to configure ActiveMQ Artemis Client.</returns> public static IActiveMqBuilder AddAnonymousProducer <TProducer>(this IActiveMqBuilder builder, ProducerOptions producerOptions, ServiceLifetime producerLifetime = ServiceLifetime.Transient) where TProducer : class { var anonymousProducerConfiguration = new AnonymousProducerConfiguration { MessagePriority = producerOptions.MessagePriority, MessageDurabilityMode = producerOptions.MessageDurabilityMode, MessageIdPolicy = producerOptions.MessageIdPolicy, SetMessageCreationTime = producerOptions.SetMessageCreationTime }; return(builder.AddAnonymousProducer <TProducer>(anonymousProducerConfiguration, producerLifetime)); }
public async Task <IAnonymousProducer> CreateAsync(AnonymousProducerConfiguration configuration, CancellationToken cancellationToken) { if (configuration == null) { throw new ArgumentNullException(nameof(configuration)); } cancellationToken.ThrowIfCancellationRequested(); cancellationToken.Register(() => _tcs.TrySetCanceled()); var target = new Target { Address = null, }; var senderLink = new SenderLink(_session, Guid.NewGuid().ToString(), target, OnAttached); senderLink.AddClosedCallback(OnClosed); await _tcs.Task.ConfigureAwait(false); var producer = new AnonymousProducer(_loggerFactory, senderLink, _transactionsManager, configuration); senderLink.Closed -= OnClosed; return(producer); }
public AutoRecoveringAnonymousProducer(ILoggerFactory loggerFactory, AnonymousProducerConfiguration configuration) : base(loggerFactory) { _configuration = configuration; }
private static IActiveMqBuilder AddAnonymousProducer <TProducer>(this IActiveMqBuilder builder, AnonymousProducerConfiguration producerConfiguration, ServiceLifetime producerLifetime) where TProducer : class { if (builder.Services.Any(x => x.ServiceType == typeof(TProducer))) { var message = $"There has already been registered Anonymous Producer with the type '{typeof(TProducer).FullName}'. " + "Typed Anonymous Producer must be unique. " + "Consider using inheritance to create multiple unique types with the same API surface."; throw new InvalidOperationException(message); } builder.Services.AddSingleton(provider => { var sendObservable = provider.GetServices <SendObservable>().Single(x => x.Name == builder.Name); var logger = provider.GetService <ILogger <TypedActiveMqAnonymousProducer <TProducer> > >(); return(new TypedActiveMqAnonymousProducer <TProducer>(logger, async token => { var connection = await provider.GetConnection(builder.Name, token).ConfigureAwait(false); return await connection.CreateAnonymousProducerAsync(producerConfiguration, token).ConfigureAwait(false); }, sendObservable)); }); builder.Services.AddSingleton <IActiveMqProducer>(provider => provider.GetRequiredService <TypedActiveMqAnonymousProducer <TProducer> >()); builder.Services.Add(ServiceDescriptor.Describe(typeof(TProducer), provider => ActivatorUtilities.CreateInstance <TProducer>(provider, provider.GetRequiredService <TypedActiveMqAnonymousProducer <TProducer> >()), producerLifetime)); return(builder); }
/// <summary> /// Adds the <see cref="IAnonymousProducer"/> and configures a binding between the <typeparam name="TProducer" /> and named <see cref="IProducer"/> instance. /// </summary> /// <param name="builder">The <see cref="IActiveMqBuilder"/>.</param> /// <param name="producerLifetime">The lifetime with which to register the <typeparam name="TProducer" /> in the container.</param> /// <typeparam name="TProducer">The type of the typed producer. The type specified will be registered in the service collection as /// a transient service by default.</typeparam> /// <returns>The <see cref="IActiveMqBuilder"/> that can be used to configure ActiveMQ Artemis Client.</returns> public static IActiveMqBuilder AddAnonymousProducer <TProducer>(this IActiveMqBuilder builder, ServiceLifetime producerLifetime = ServiceLifetime.Transient) where TProducer : class { var anonymousProducerConfiguration = new AnonymousProducerConfiguration(); return(builder.AddAnonymousProducer <TProducer>(anonymousProducerConfiguration, producerLifetime)); }