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>(); }
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()); }
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); }
public async Task StartAsync(CancellationToken cancellationToken) { await WrapStarter(() => _connection = _connectionFactory.Get <QueryNatsAdapter>(), cancellationToken); var queue = _queueFactory.Get(); _subscription = _connection.SubscribeAsync(queue, CreateHandler()); }
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); }
/// <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()); }