public static IDisposable Subscribe(this AutoSubscriber autoSubscriber, Type[] consumerTypes, CancellationToken cancellationToken = default) { Preconditions.CheckNotNull(autoSubscriber, "autoSubscriber"); return(autoSubscriber.SubscribeAsync(consumerTypes, cancellationToken) .GetAwaiter() .GetResult()); }
// ReSharper disable once UnusedParameter.Local private static void Main(string[] args) { LoggerConfig.ConfigureLogger(); var container = UnityConfig.RegisterComponents(); RabbitHutch.SetContainerFactory(() => new UnityAdapter(container)); using (var bus = RabbitHutch.CreateBus(ConfigurationManager.ConnectionStrings["RabbitMQ"].ConnectionString)) { var autoSubscriber = new AutoSubscriber(bus, "Worker") { AutoSubscriberMessageDispatcher = new UnityMessageDispatcher(container) }; autoSubscriber.Subscribe(Assembly.GetExecutingAssembly()); autoSubscriber.SubscribeAsync(Assembly.GetExecutingAssembly()); Console.ReadLine(); } }
/// <summary> /// Registers all async consumers in passed assembly. The actual Subscriber instances is /// created using <seealso cref="AutoSubscriber.AutoSubscriberMessageDispatcher"/>. The SubscriptionId per consumer /// method is determined by <seealso cref="AutoSubscriber.GenerateSubscriptionId"/> or if the method /// is marked with <see cref="AutoSubscriberConsumerAttribute"/> with a custom SubscriptionId. /// </summary> /// <param name="autoSubscriber">The autoSubscriber instance.</param> /// <param name="assemblies">The assemblies to scan for consumers.</param> /// <param name="cancellationToken">The cancellation token.</param> public static Task <IDisposable> SubscribeAsync(this AutoSubscriber autoSubscriber, Assembly[] assemblies, CancellationToken cancellationToken = default) { Preconditions.CheckAny(assemblies, nameof(assemblies), "No assemblies specified."); return(autoSubscriber.SubscribeAsync(assemblies.SelectMany(a => a.GetTypes()).ToArray(), cancellationToken)); }
public IBus CreateBus(string connectionStringKey, IWindsorContainer container) { var appSettings = new AppSettings(); var connectionString = appSettings.ConnectionStrings.Get(connectionStringKey, () => DefaultConnection); var subscriptionPrefix = appSettings.RabbitMQ.SubscriptionPrefix; try { Log.InfoFormat("Connecting to RabbitMQ via {0} and using subscription prefix {1}", connectionString, subscriptionPrefix); var logger = new RabbitMQLogger(); var bus = RabbitHutch.CreateBus(connectionString, x => x.Register<IEasyNetQLogger>(p => logger)); var autoSubscriber = new AutoSubscriber(bus, subscriptionPrefix) { AutoSubscriberMessageDispatcher = new WindsorMessageDispatcher(container) }; var registration = new ConsumerRegistration(); var assemblies = registration.GetAssemblies(container); autoSubscriber.Subscribe(assemblies.ToArray()); autoSubscriber.SubscribeAsync(assemblies.ToArray()); Log.DebugFormat("Connected to RabbitMQ on {0} and using subscription prefix {1}", connectionString, subscriptionPrefix); return bus; } catch (Exception e) { Log.ErrorFormat("Failed to create a bus for RabbitMQ with connectionstring: {0}", connectionString); Log.ErrorFormat("The failure was {0}", e.Message); throw; } }