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 }); }
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); }
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); } } }
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; }