public IcmTickPriceHarvester(IcmExchangeConfiguration config, IcmModelConverter modelConverter, IHandler <TickPrice> tickPriceHandler, ILog log)
        {
            _log     = log;
            _enabled = config.RabbitMq.Enabled;
            if (!_enabled)
            {
                return;
            }
            var instruments    = config.SupportedCurrencySymbols.Select(x => new Instrument(IcmExchange.Name, x.LykkeSymbol).Name).ToHashSet();
            var rabbitSettings = new RabbitMqSubscriptionSettings
            {
                ConnectionString = config.RabbitMq.ConnectionString,
                ExchangeName     = config.RabbitMq.Exchange,
                QueueName        = config.RabbitMq.Queue
            };
            var errorStrategy = new DefaultErrorHandlingStrategy(_log, rabbitSettings);

            _rabbit = new RabbitMqSubscriber <OrderBook>(rabbitSettings, errorStrategy)
                      .SetMessageDeserializer(new GenericRabbitModelConverter <OrderBook>())
                      .SetMessageReadStrategy(new MessageReadWithTemporaryQueueStrategy())
                      .SetConsole(new LogToConsole())
                      .SetLogger(_log)
                      .Subscribe(async orderBook =>
            {
                if (instruments.Contains(orderBook.Asset))
                {
                    var tickPrice = modelConverter.ToTickPrice(orderBook);
                    if (tickPrice != null)
                    {
                        await tickPriceHandler.Handle(tickPrice);
                    }
                }
            });
        }
 public void SetUp()
 {
     _settings = new RabbitMqSubscriptionSettings
     {
         QueueName = "QueueName"
     };
     _strategy = new DefaultErrorHandlingStrategy(EmptyLogFactory.Instance, _settings);
 }
        public void ShouldResendToNextHandlerOnError()
        {
            var nextHandler = Substitute.For <IErrorHandlingStrategy>();

            _strategy = new DefaultErrorHandlingStrategy(EmptyLogFactory.Instance, _settings, nextHandler);

            var handler  = new Action(() => throw new Exception());
            var acceptor = Substitute.For <IMessageAcceptor>();

            _strategy.Execute(handler, acceptor, CancellationToken.None);

            nextHandler.Received(1).Execute(handler, acceptor, CancellationToken.None);
        }
Example #4
0
        private void StartRabbitMqOrdersSubscription()
        {
            var rabbitSettings = new RabbitMqSubscriptionSettings()
            {
                ConnectionString = Config.RabbitMq.Orders.ConnectionString,
                ExchangeName     = Config.RabbitMq.Orders.Exchange,
                QueueName        = Config.RabbitMq.Orders.Queue
            };
            var errorStrategy = new DefaultErrorHandlingStrategy(LykkeLog, rabbitSettings);

            orderStatusesRabbit = new RabbitMqSubscriber <LimitOrderMessage>(rabbitSettings, errorStrategy)
                                  .SetMessageDeserializer(new GenericRabbitModelConverter <LimitOrderMessage>())
                                  .SetMessageReadStrategy(new MessageReadWithTemporaryQueueStrategy())
                                  .SetConsole(new LogToConsole())
                                  .SetLogger(LykkeLog)
                                  .Subscribe(HandleOrderStatus)
                                  .Start();
        }
Example #5
0
        private void RegisterTradeSignalSubscriber(ContainerBuilder container)
        {
            var subscriberSettings = new RabbitMqSubscriptionSettings
            {
                ConnectionString = _config.RabbitMq.Signals.ConnectionString,
                ExchangeName     = _config.RabbitMq.Signals.Exchange,
                QueueName        = _config.RabbitMq.Signals.Queue,
                IsDurable        = false
            };

            var errorStrategy = new DefaultErrorHandlingStrategy(_log, subscriberSettings);
            var subscriber    = new RabbitMqSubscriber <TradingSignal>(subscriberSettings, errorStrategy)
                                .SetMessageDeserializer(new GenericRabbitModelConverter <TradingSignal>())
                                .SetMessageReadStrategy(new MessageReadWithTemporaryQueueStrategy())
                                .SetConsole(new LogToConsole())
                                .SetLogger(_log);

            container.Register(c => subscriber);
        }
Example #6
0
        public LimitOrdersConsumer(ILogFactory logFactory,
                                   RabbitMqSettings settings,
                                   IWampHostedRealm realm,
                                   ISessionRepository sessionRepository)
        {
            if (settings == null)
            {
                throw new ArgumentNullException(nameof(settings));
            }
            if (logFactory == null)
            {
                throw new ArgumentNullException(nameof(logFactory));
            }

            _sessionRepository = sessionRepository ?? throw new ArgumentNullException(nameof(sessionRepository));
            _subject           = realm.Services.GetSubject(TopicUri);

            try
            {
                var subscriptionSettings = new RabbitMqSubscriptionSettings
                {
                    ConnectionString = settings.ConnectionString,
                    QueueName        = $"{settings.ExchangeName}.{QueueName}",
                    ExchangeName     = settings.ExchangeName,
                    IsDurable        = QueueDurable
                };
                var strategy = new DefaultErrorHandlingStrategy(logFactory, subscriptionSettings);
                _subscriber = new RabbitMqSubscriber <LimitOrderMessage>(logFactory, subscriptionSettings, strategy)
                              .SetMessageDeserializer(new JsonMessageDeserializer <LimitOrderMessage>())
                              .SetMessageReadStrategy(new MessageReadWithTemporaryQueueStrategy())
                              .Subscribe(ProcessLimitOrder)
                              .Start();
            }
            catch (Exception ex)
            {
                var log = logFactory.CreateLog(this);
                log.Error(ex);
                throw;
            }
        }
        public ICMTickPriceHarvester(
            ICMAdapterSettings config,
            ICMModelConverter modelConverter,
            IHandler <TickPrice> tickPriceHandler,
            IHandler <TradingOrderBook> orderBookHandler,
            IThrottling orderBooksThrottler,
            IThrottling tickPriceThrottler,
            RepeatingTicksFilter repeatingTicksFilter,
            ILog log)
        {
            _config           = config;
            _modelConverter   = modelConverter;
            _tickPriceHandler = tickPriceHandler;
            _orderBookHandler = orderBookHandler;

            _orderBooksThrottler  = orderBooksThrottler;
            _tickPricesThrottler  = tickPriceThrottler;
            _repaetingTicksFilter = repeatingTicksFilter;

            _log = log;

            _instruments = config.SupportedCurrencySymbols.Select(x => new Instrument(x.LykkeSymbol).Name).ToHashSet();
            var rabbitSettings = new RabbitMqSubscriptionSettings
            {
                ConnectionString = config.RabbitMq.SourceFeed.ConnectionString,
                ExchangeName     = config.RabbitMq.SourceFeed.Exchange,
                QueueName        = config.RabbitMq.SourceFeed.Queue
            };
            var errorStrategy = new DefaultErrorHandlingStrategy(_log, rabbitSettings);

            _rabbit = new RabbitMqSubscriber <ICMOrderBook>(rabbitSettings, errorStrategy)
                      .SetMessageDeserializer(new GenericRabbitModelConverter <ICMOrderBook>())
                      .SetMessageReadStrategy(new MessageReadWithTemporaryQueueStrategy())
                      .SetConsole(new LogToConsole())
                      .SetLogger(_log)
                      .Subscribe(HandleOrderBook);
        }
        public IcmTickPriceHarvester(
            IcmExchangeConfiguration config,
            IcmModelConverter modelConverter,
            IHandler <TickPrice> tickPriceHandler,
            IHandler <Trading.OrderBook> orderBookHandler,
            ILog log)
        {
            _config           = config;
            _modelConverter   = modelConverter;
            _tickPriceHandler = tickPriceHandler;
            _orderBookHandler = orderBookHandler;
            _log     = log;
            _enabled = config.RabbitMq.Enabled;
            if (!_enabled)
            {
                return;
            }
            _instruments = config.SupportedCurrencySymbols.Select(x => new Instrument(IcmExchange.Name, x.LykkeSymbol).Name).ToHashSet();
            var rabbitSettings = new RabbitMqSubscriptionSettings
            {
                ConnectionString = config.RabbitMq.ConnectionString,
                ExchangeName     = config.RabbitMq.Exchange,
                QueueName        = config.RabbitMq.Queue
            };
            var errorStrategy = new DefaultErrorHandlingStrategy(_log, rabbitSettings);

            if (_config.Enabled)
            {
                _rabbit = new RabbitMqSubscriber <OrderBook>(rabbitSettings, errorStrategy)
                          .SetMessageDeserializer(new GenericRabbitModelConverter <OrderBook>())
                          .SetMessageReadStrategy(new MessageReadWithTemporaryQueueStrategy())
                          .SetConsole(new LogToConsole())
                          .SetLogger(_log)
                          .Subscribe(HandleOrderBook);
            }
        }