/// <summary> /// Send a request from the bus to the endpoint, and return a Task which can be awaited for the response. /// </summary> /// <param name="consumeContext"></param> /// <param name="bus">A started bus instance</param> /// <param name="message">The request message</param> /// <param name="cancellationToken">An optional cancellationToken for this request</param> /// <param name="timeout">An optional timeout for the request (defaults to 30 seconds)</param> /// <param name="callback">A callback, which can modify the <see cref="SendContext"/> of the request</param> /// <typeparam name="TRequest">The request type</typeparam> /// <typeparam name="TResponse">The response type</typeparam> /// <returns></returns> public static Task <Response <TResponse> > Request <TRequest, TResponse>(this ConsumeContext consumeContext, IBus bus, TRequest message, CancellationToken cancellationToken = default, RequestTimeout timeout = default, Action <SendContext <TRequest> > callback = null) where TRequest : class where TResponse : class { var requestClient = consumeContext.CreateRequestClient <TRequest>(bus, timeout); var requestHandle = requestClient.Create(message, cancellationToken); if (callback != null) { requestHandle.UseExecute(callback); } return(requestHandle.GetResponse <TResponse>()); }
/// <summary> /// Send a request from the bus to the endpoint, and return a Task which can be awaited for the response. /// </summary> /// <param name="consumeContext"></param> /// <param name="bus">A started bus instance</param> /// <param name="message">The request message</param> /// <param name="cancellationToken">An optional cancellationToken for this request</param> /// <param name="timeout">An optional timeout for the request (defaults to 30 seconds)</param> /// <param name="callback">A callback, which can modify the <see cref="SendContext" /> of the request</param> /// <typeparam name="TRequest">The request type</typeparam> /// <typeparam name="TResponse">The response type</typeparam> /// <returns></returns> public static async Task <Response <TResponse> > Request <TRequest, TResponse>(this ConsumeContext consumeContext, IBus bus, TRequest message, CancellationToken cancellationToken = default, RequestTimeout timeout = default, Action <SendContext <TRequest> > callback = null) where TRequest : class where TResponse : class { IRequestClient <TRequest> requestClient = consumeContext.CreateRequestClient <TRequest>(bus, timeout); using (RequestHandle <TRequest> requestHandle = requestClient.Create(message, cancellationToken)) { if (callback != null) { requestHandle.UseExecute(callback); } return(await requestHandle.GetResponse <TResponse>().ConfigureAwait(false)); } }
public async Task Consume(ConsumeContext <OrderRequest> context) { await context.RespondAsync <OrderResponse>(new { }); await context.Publish <OrderResponse>(new { }); var endpoint = await context.GetSendEndpoint(new Uri("queue:some-queue")); await endpoint.Send <OrderResponse>(new { }); var requestClient = context.CreateRequestClient <OrderRequest>(null); var request = requestClient.Create(new { }); }
/// <summary> /// Initializes a new instance. /// </summary> /// <param name="bus"></param> public ConsumeContextRequestClientProxy(ConsumeContext context) { this.impl = context.CreateRequestClient <TRequest>(context.GetPayload <IBus>()); }