Example #1
0
        public static void DynamicAddSender(PlatformBus advancedBus, OutMessage outMes, string exchName, string exchType = null)
        {
            if (advancedBus.Senders.Any(x => x.ExchangeName == exchName && x.RouteKey == outMes.Key))
            {
                return;
            }

            if (string.IsNullOrEmpty(exchName) || string.IsNullOrEmpty(outMes.Name))
            {
                throw new ArgumentNullException("exchName or name");
            }
            if (string.IsNullOrEmpty(exchType))
            {
                exchType = "topic";
            }

            var exchange = advancedBus.CoreBus.ExchangeDeclare(exchName, exchType);

            if (!outMes.Timeout.HasValue)
            {
                outMes.Timeout = new TimeSpan(0, 0, 10);
            }

            advancedBus.Senders.Add(
                new BusSender(EndpointInfoFactory.Create(advancedBus.CoreBus, exchange, outMes.Name, outMes.Key,
                                                         outMes.Persist, outMes.Timeout))
            {
                ExchangeType = exchType
            });
        }
Example #2
0
        public static string CreatedBindedQueue(PlatformBus bus, string queueKey, string exchangeName, string exchType)
        {
            var rabbitExchange = bus.CoreBus.ExchangeDeclare(exchangeName, exchType);
            var qName          = string.Format("{0}.{1}", exchangeName, queueKey);
            var queue          = bus.CoreBus.QueueDeclare(qName);

            bus.CoreBus.Bind(rabbitExchange, queue, queueKey);
            return(qName);
        }
Example #3
0
        public static void DynamicAddInfrustructure(PlatformBus bus, IList <ExchangeItem> exchnages)
        {
            foreach (var exchangeItem in exchnages)
            {
                var existExchange = bus.Exchanges.FirstOrDefault(x => x.Name == exchangeItem.Name);
                if (existExchange == null)
                {
                    var rabbitExchange = bus.CoreBus.ExchangeDeclare(exchangeItem.Name, exchangeItem.Type);
                    exchangeItem.RabbitExchange = rabbitExchange;
                    bus.Exchanges.Add(exchangeItem);
                }
                else
                {
                    exchangeItem.RabbitExchange = existExchange.RabbitExchange;
                }

                CreateConsumers(bus.Resolver, bus.CoreBus, exchangeItem);
                foreach (var outMes in exchangeItem.Out)
                {
                    DynamicAddSender(bus, outMes, exchangeItem.Name, exchangeItem.Type);
                }
            }
        }
Example #4
0
        public static PlatformBusBuilder Create(IDependencyResolver resolver)
        {
            ServiceBusSection section = ServiceBusSection.Current;
            var bus = RabbitHutch.CreateBus(section.ConnectionString,
                                            serviceRegister =>
            {
                serviceRegister.Register <ITypeNameSerializer>(
                    serviceProvider => new PlatformTypeNameSerializer());
                serviceRegister.Register <IEasyNetQLogger>(serviceProvider => new PlatformLogger());
                serviceRegister.Register <IConventions>(
                    serviceProvider => new PlatformConventions(serviceProvider.Resolve <ITypeNameSerializer>()));
                serviceRegister.Register <IConsumerErrorStrategy>(
                    serviceProvider =>
                    new ConsumerErrorStrategy(serviceProvider.Resolve <IConnectionFactory>(),
                                              serviceProvider.Resolve <ISerializer>(), serviceProvider.Resolve <IEasyNetQLogger>(),
                                              serviceProvider.Resolve <IConventions>(), serviceProvider.Resolve <ITypeNameSerializer>()));
            });
            var advancedBus = bus.Advanced;

            advancedBus.MessageReturned += (bytes, properties, arg3) =>
                                           Logger.Error("Message was returned to sender with reason :[{0}].Message : [{1}]", arg3, Encoding.UTF8.GetString(bytes));

            var set = new HashSet <IBusSender>();

            var platformBus = new PlatformBus(set, advancedBus, resolver, section.SendRetryEnabled);

            IList <Action> consumeActions = new List <Action>();

            //TODO: NOTE: Or get it from DB!
            foreach (var exchangeItem in section.Exchanges.Cast <ExchangeElement>())
            {
                var rabbitExchange   = advancedBus.ExchangeDeclare(exchangeItem.Name, exchangeItem.Type);
                var platformExchange = GetPlatformExchangeFromConfig(exchangeItem);
                platformExchange.RabbitExchange = rabbitExchange;
                platformBus.Exchanges.Add(platformExchange);

                consumeActions.Add(() => CreateConsumers(resolver, advancedBus, platformExchange));
                AddSenders(advancedBus, rabbitExchange, exchangeItem, set, section);
            }

            lock (lockObj)
            {
                RedButton = () =>
                {
                    if (!started)
                    {
                        lock (lockObj)
                        {
                            if (!started)
                            {
                                foreach (var consumeAction in consumeActions)
                                {
                                    consumeAction.Invoke();
                                }

                                started = true;
                            }
                        }
                    }
                };
            }

            return(new PlatformBusBuilder(platformBus));
        }
 public PlatformBusBuilder(PlatformBus bus)
 {
     Bus = bus;
 }