public IRequestClient <T> CreateRequestClient <T>(RequestTimeout timeout) where T : class { if (EndpointConvention.TryGetDestinationAddress <T>(out var destinationAddress)) { return(CreateRequestClient <T>(destinationAddress, timeout)); } return(new RequestClient <T>(_context, _context.GetRequestEndpoint <T>(), timeout.Or(_context.DefaultTimeout))); }
public async Task <IRequestSendEndpoint <TMessage> > GetServiceSendEndpoint(ClientFactoryContext clientFactoryContext, TMessage message, ConsumeContext consumeContext = default, CancellationToken cancellationToken = default) { // TODO use the message to generate the hash key var correlationId = NewId.NextGuid(); var endpointInfo = _distribution.GetNode(correlationId.ToByteArray()); if (endpointInfo == null) { await Link(cancellationToken).ConfigureAwait(false); endpointInfo = _distribution.GetNode(correlationId.ToByteArray()); } var endpointAddress = endpointInfo?.EndpointAddress ?? await _serviceAddress.Task.ConfigureAwait(false); return(clientFactoryContext.GetRequestEndpoint <TMessage>(endpointAddress, consumeContext)); }
public async Task <IRequestSendEndpoint <TMessage> > GetServiceSendEndpoint(ClientFactoryContext clientFactoryContext, TMessage message, ConsumeContext consumeContext = default, CancellationToken cancellationToken = default) { // TODO use the message to generate the hash key // var correlationId = NewId.NextGuid(); // // var endpointInfo = _distribution.GetNode(correlationId.ToByteArray()); // if (endpointInfo == null) // { // await Link(cancellationToken).ConfigureAwait(false); // // endpointInfo = _distribution.GetNode(correlationId.ToByteArray()); // } var endpointAddress = _serviceAddress.Task.IsCompletedSuccessfully() ? _serviceAddress.Task.Result : await _serviceAddress.Task.ConfigureAwait(false); // TODO may want to switch this up so that it includes the InstanceContext is a specific node selected return(clientFactoryContext.GetRequestEndpoint <TMessage>(endpointAddress, consumeContext)); }