コード例 #1
0
        public async Task StartAsync(CancellationToken cancellationToken)
        {
            await WrapStarter(() => _connection = _connectionFactory.Get <QueryNatsAdapter>(), cancellationToken);

            var queue = _queueFactory.Get();

            _subscription = _connection.SubscribeAsync(queue, CreateHandler());
        }
コード例 #2
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);
        }