EasyNetQ by Mike Hadlow,Michael Denny,Yury Pliner,Wiebe Tijsma,Contributors (see GitHub repo)

<PackageReference Include="EasyNetQ" Version="4.0.3" />

 Rpc

public class Rpc : IRpc
protected class ResponseAction

protected struct RpcKey

protected const string exceptionMessageKey = "ExceptionMessage"

protected const string isFaultedKey = "IsFaulted"

protected readonly IAdvancedBus advancedBus

protected readonly IConventions conventions

public Rpc(ConnectionConfiguration connectionConfiguration, IAdvancedBus advancedBus, IEventBus eventBus, IConventions conventions, IExchangeDeclareStrategy exchangeDeclareStrategy, IMessageDeliveryModeStrategy messageDeliveryModeStrategy, ITimeoutStrategy timeoutStrategy, ITypeNameSerializer typeNameSerializer)

protected Task ExecuteResponder<TRequest, TResponse>(Func<TRequest, Task<TResponse>> responder, IMessage<TRequest> requestMessage)

protected virtual void OnResponderFailure<TRequest, TResponse>(IMessage<TRequest> requestMessage, string exceptionMessage, Exception exception)

protected virtual void OnResponderSuccess<TRequest, TResponse>(IMessage<TRequest> requestMessage, TResponse response)

protected void RegisterErrorHandling<TResponse>(Guid correlationId, Timer timer, TaskCompletionSource<TResponse> tcs)

public virtual Task<TResponse> Request<TRequest, TResponse>(TRequest request, Action<IRequestConfiguration> configure)

protected virtual void RequestPublish<TRequest>(TRequest request, string routingKey, string returnQueueName, Guid correlationId)

public virtual IDisposable Respond<TRequest, TResponse>(Func<TRequest, Task<TResponse>> responder)

public virtual IDisposable Respond<TRequest, TResponse>(Func<TRequest, Task<TResponse>> responder, Action<IResponderConfiguration> configure)

protected virtual string SubscribeToResponse<TRequest, TResponse>()