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