Beispiel #1
0
        public static IDisposable Subscribe(this AutoSubscriber autoSubscriber, Type[] consumerTypes, CancellationToken cancellationToken = default)
        {
            Preconditions.CheckNotNull(autoSubscriber, "autoSubscriber");

            return(autoSubscriber.SubscribeAsync(consumerTypes, cancellationToken)
                   .GetAwaiter()
                   .GetResult());
        }
Beispiel #2
0
        // 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();
            }
        }
Beispiel #3
0
        /// <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;
            }
        }