コード例 #1
0
 public NatsMessageBus(IDiScope diScope, INatsConnectionFactory connectionFactory,
                       IRepository <IMessageResult> storage, INatsReceiverCommandQueueFactory queueFactory)
 {
     _diScope            = diScope;
     _storage            = storage;
     _queueFactory       = queueFactory;
     _connection         = connectionFactory.Get <CommandNatsAdapter>();
     _responseConnection = connectionFactory.Get <ResultAdapter>();
 }
コード例 #2
0
        public async Task StartAsync(CancellationToken cancellationToken)
        {
            await WrapStarter(() =>
            {
                _connection        = _connectionFactory.Get <CommandNatsAdapter>();
                _responeConnection = _connectionFactory.Get <ResultAdapter>();
            }, cancellationToken);

            var commandQueue = _queueFactory.Get();

            _subscription = _connection.SubscribeAsync(commandQueue.Key, commandQueue.Value, CreateHandler());
        }
コード例 #3
0
        protected override async Task ExecuteAsync(CancellationToken stoppingToken)
        {
            if (!_settings.Enabled)
            {
                return;
            }

            LogInfo("Starting..");

            _connection = _connectionFactory.Get <BkMqMessage>();

            WebDriver = DriverFactory.GetNewDriver(_settings.Driver);
            WebDriver.Open(_settings.Url, _waitBy);

            var sw = new Stopwatch();

            sw.Start();
            while (!stoppingToken.IsCancellationRequested)
            {
                var games = await FetchGames();

                if (!games.Any())
                {
                    continue;
                }

                SendResult(new BkMqMessage(games));
                Console.WriteLine($"{_settings.Url}: {sw.ElapsedMilliseconds}");
                sw.Restart();
            }

            LogInfo("Started");
        }
        public Task <TResult> Ask(TCriterion criterion)
        {
            var connection = _connectionFactory.Get <QueryNatsAdapter>();

            QueryNatsAdapter response;

            try
            {
                response = (QueryNatsAdapter)connection.Request(
                    _queueFactory.GetQueryQueue(criterion, typeof(TResult)),
                    new QueryNatsAdapter(criterion, typeof(TResult)), 60000);
            }
            catch (NATSTimeoutException)
            {
                throw new Exception("Nats connection timeout exceed");
            }

            var resultType = _typeFactory.Get(response.QueryResultType);

            if (resultType == typeof(TResult))
            {
                return(Task.Run(() =>
                                _serializer.DeserializeMsg <TResult>(response.QueryResult, resultType)));
            }

            throw new Exception(response.QueryResult);
        }
コード例 #5
0
        public async Task StartAsync(CancellationToken cancellationToken)
        {
            await WrapStarter(() => _connection = _connectionFactory.Get <QueryNatsAdapter>(), cancellationToken);

            var queue = _queueFactory.Get();

            _subscription = _connection.SubscribeAsync(queue, CreateHandler());
        }
コード例 #6
0
        public async Task <TResult> Ask(TCriterion criterion)
        {
            var connection = _connectionFactory.Get <QueryNatsAdapter>();

            var replySubj = GetRandomString();
            QueryNatsAdapter response;

            try
            {
                var queryQueue = _queueFactory.Get();
                var data       = new QueryNatsAdapter(criterion, typeof(TResult))
                {
                    QueryResult = replySubj
                };

                connection.Publish(queryQueue, data);
                connection.Flush();

                response = await GetResponse(connection, replySubj, out var subscription);

                subscription.Dispose();
            }
            catch (NATSTimeoutException)
            {
                throw new InternalException("Nats connection timeout exceed");
            }
            catch (Exception ex)
            {
                throw new InternalException(ex.Message);
            }

            var resultType = _typeFactory.Get(response.QueryResultType);

            if (resultType == typeof(TResult))
            {
                return(_serializer.DeserializeMsg <TResult>(response.QueryResult, resultType));
            }

            throw new InternalException(response.QueryResult);
        }
コード例 #7
0
        /// <summary>
        /// Start
        /// </summary>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        public async Task StartAsync(CancellationToken cancellationToken)
        {
            await WrapStarter(() => _connection = _connectionFactory.Get <BkMqMessage>(), cancellationToken);

            _subscription = _connection.SubscribeAsync(_options.QueueSubject, CreateHandler());
        }