/// <summary> /// 添加接收消息处理事件 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="builder"></param> /// <param name="queue"></param> /// <param name="onMessage"></param> /// <returns></returns> public static IEasyNetQConsumerBuilder AddReceiver <T>(this IEasyNetQConsumerBuilder builder, string queue, Func <T, Task> onMessage) where T : class { return(builder.AddReceiver <T>(queue, async(_, t) => { await onMessage?.Invoke(t); })); }
/// <summary> /// 添加接收消息处理事件 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="builder"></param> /// <param name="queue"></param> /// <param name="onMessage"></param> /// <returns></returns> public static IEasyNetQConsumerBuilder AddReceiver <T>(this IEasyNetQConsumerBuilder builder, string queue, Action <T> onMessage) where T : class { return(builder.AddReceiver <T>(queue, (_, t) => { onMessage?.Invoke(t); })); }
/// <summary> /// 添加接收消息处理事件 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="builder"></param> /// <param name="queue"></param> /// <param name="onMessage"></param> /// <returns></returns> public static IEasyNetQConsumerBuilder AddReceiver <T>(this IEasyNetQConsumerBuilder builder, string queue, Action <IServiceProvider, T> onMessage) where T : class { return(builder.AddReceiver <T>(queue, async(s, t) => { onMessage?.Invoke(s, t); await Task.CompletedTask; })); }
/// <summary> /// 添加响应消息处理事件 /// </summary> /// <typeparam name="TRequest"></typeparam> /// <typeparam name="TResponse"></typeparam> /// <param name="builder"></param> /// <param name="responder"></param> /// <returns></returns> public static IEasyNetQConsumerBuilder AddResponder <TRequest, TResponse>(this IEasyNetQConsumerBuilder builder, Func <TRequest, TResponse> responder) where TRequest : class where TResponse : class { return(builder.AddResponder <TRequest, TResponse>(async(_, t) => { var result = responder?.Invoke(t); return await Task.FromResult(result); })); }
/// <summary> /// 添加接收消息处理事件 /// </summary> /// <typeparam name="T"></typeparam> /// <typeparam name="TReceiver"></typeparam> /// <param name="builder"></param> /// <param name="queue"></param> /// <returns></returns> public static IEasyNetQConsumerBuilder AddReceiver <T, TReceiver>(this IEasyNetQConsumerBuilder builder, string queue) where T : class where TReceiver : class, IEasyNetQReceiver <T> { builder.Services.AddTransient <TReceiver>(); return(builder.AddReceiver <T>(queue, async(serviceProvicer, t) => { var receiver = serviceProvicer.GetRequiredService <TReceiver>(); await receiver.ReceiveAsync(t); })); }
/// <summary> /// 添加订阅消息处理事件 /// </summary> /// <typeparam name="T"></typeparam> /// <typeparam name="TSubscriber"></typeparam> /// <param name="builder"></param> /// <param name="subscriptionId"></param> /// <returns></returns> public static IEasyNetQConsumerBuilder AddSubscriber <T, TSubscriber>(this IEasyNetQConsumerBuilder builder, string subscriptionId) where T : class where TSubscriber : class, IEasyNetQSubscriber <T> { builder.Services.AddTransient <TSubscriber>(); builder.AddSubscriber <T>(subscriptionId, async(serviceProvider, t) => { var subscriber = serviceProvider.GetRequiredService <TSubscriber>(); await subscriber.SubscribeAsync(t); }); return(builder); }
/// <summary> /// 添加接收消息处理事件 /// </summary> /// <param name="builder"></param> /// <param name="queue"></param> /// <param name="receiverType"></param> /// <returns></returns> public static IEasyNetQConsumerBuilder AddReceiver(this IEasyNetQConsumerBuilder builder, string queue, Type receiverType) { var @interface = receiverType.GetInterfaces().FirstOrDefault(f => f.IsGenericType && f.GetGenericTypeDefinition() == typeof(IEasyNetQReceiver <>)); if (@interface == null) { throw new ArgumentException($"the receiver type must be implement IEasyNetQReceiver<> and none abstract class", "receiverType"); } var messageType = @interface.GetGenericArguments().First(); var addReceiver = typeof(EasyNetQExtensions) .GetMethods() .Where(f => string.Equals(f.Name, nameof(EasyNetQExtensions.AddReceiver))) .Where(f => f.IsGenericMethod && f.GetGenericArguments().Length == 2 && f.GetParameters().LastOrDefault()?.ParameterType == typeof(string)) .FirstOrDefault(); addReceiver.MakeGenericMethod(messageType, receiverType).Invoke(null, new object[] { builder, queue }); return(builder); }
/// <summary> /// 添加响应消息处理事件 /// </summary> /// <param name="builder"></param> /// <param name="responderType"></param> /// <returns></returns> public static IEasyNetQConsumerBuilder AddResponder(this IEasyNetQConsumerBuilder builder, Type responderType) { var @interface = responderType.GetInterfaces().FirstOrDefault(f => f.IsGenericType && f.GetGenericTypeDefinition() == typeof(IEasyNetQResponder <,>)); if (@interface == null) { throw new ArgumentException($"the responder type must be implement IEasyNetQResponder<TRequest,TResponse> and none abstract class", nameof(responderType)); } var types = @interface.GetGenericArguments(); var requestType = types.First(); var response = types.Last(); var addResponder = typeof(EasyNetQExtensions) .GetMethods() .Where(f => string.Equals(f.Name, nameof(EasyNetQExtensions.AddResponder)) && f.IsGenericMethod && f.GetGenericArguments().Length == 3) .FirstOrDefault(); addResponder.MakeGenericMethod(requestType, response, responderType).Invoke(null, new object[] { builder }); return(builder); }
/// <summary> /// 添加订阅消息处理事件 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="builder"></param> /// <param name="onMessage"></param> /// <returns></returns> public static IEasyNetQConsumerBuilder AddSubscriber <T>(this IEasyNetQConsumerBuilder builder, Action <IServiceProvider, T> onMessage) where T : class { return(builder.AddSubscriber("", onMessage)); }
/// <summary> /// 添加接收消息处理事件 /// </summary> /// <param name="builder"></param> /// <param name="receiverType"></param> /// <returns></returns> public static IEasyNetQConsumerBuilder AddReceiver(this IEasyNetQConsumerBuilder builder, Type receiverType) { return(builder.AddReceiver("", receiverType)); }
/// <summary> /// 添加订阅消息处理事件 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="builder"></param> /// <param name="subscriptionId"></param> /// <param name="onMessage"></param> /// <returns></returns> public static IEasyNetQConsumerBuilder AddSubscriber <T>(this IEasyNetQConsumerBuilder builder, string subscriptionId, Func <T, Task> onMessage) where T : class { return(builder.AddSubscriber <T>(subscriptionId, (_, t) => onMessage?.Invoke(t))); }
/// <summary> /// 添加接收消息处理事件 /// </summary> /// <typeparam name="T"></typeparam> /// <typeparam name="TReceiver"></typeparam> /// <param name="builder"></param> /// <returns></returns> public static IEasyNetQConsumerBuilder AddReceiver <T, TReceiver>(this IEasyNetQConsumerBuilder builder) where T : class where TReceiver : class, IEasyNetQReceiver <T> { return(builder.AddReceiver <T, TReceiver>("")); }
/// <summary> /// 添加接收消息处理事件 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="builder"></param> /// <param name="onMessage"></param> /// <returns></returns> public static IEasyNetQConsumerBuilder AddReceiver <T>(this IEasyNetQConsumerBuilder builder, Func <IServiceProvider, T, Task> onMessage) where T : class { return(builder.AddReceiver("", onMessage)); }
/// <summary> /// 添加订阅消息处理事件 /// </summary> /// <typeparam name="T"></typeparam> /// <typeparam name="TSubscriber"></typeparam> /// <param name="builder"></param> /// <returns></returns> public static IEasyNetQConsumerBuilder AddSubscriber <T, TSubscriber>(this IEasyNetQConsumerBuilder builder) where T : class where TSubscriber : class, IEasyNetQSubscriber <T> { return(builder.AddSubscriber <T, TSubscriber>("")); }
/// <summary> /// 添加订阅消息处理事件 /// </summary> /// <param name="builder"></param> /// <param name="subscriberType"></param> /// <returns></returns> public static IEasyNetQConsumerBuilder AddSubscriber(this IEasyNetQConsumerBuilder builder, Type subscriberType) { return(builder.AddSubscriber("", subscriberType)); }
/// <summary> /// 添加接收消息处理事件 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="builder"></param> /// <param name="onMessage"></param> /// <returns></returns> public static IEasyNetQConsumerBuilder AddReceiver <T>(this IEasyNetQConsumerBuilder builder, Action <T> onMessage) where T : class { return(builder.AddReceiver <T>("", onMessage)); }
/// <summary> /// 添加订阅消息处理事件 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="builder"></param> /// <param name="onMessage"></param> /// <returns></returns> public static IEasyNetQConsumerBuilder AddSubscriber <T>(this IEasyNetQConsumerBuilder builder, Func <T, Task> onMessage) where T : class { return(builder.AddSubscriber("", onMessage)); }
/// <summary> /// 添加响应消息处理事件 /// </summary> /// <typeparam name="TRequest"></typeparam> /// <typeparam name="TResponse"></typeparam> /// <typeparam name="TResponder"></typeparam> /// <param name="builder"></param> /// <returns></returns> public static IEasyNetQConsumerBuilder AddResponder <TRequest, TResponse, TResponder>(this IEasyNetQConsumerBuilder builder) where TRequest : class where TResponse : class where TResponder : class, IEasyNetQResponder <TRequest, TResponse> { builder.Services.AddTransient <TResponder>(); return(builder.AddResponder <TRequest, TResponse>(async(serviceProvicer, request) => { var responder = serviceProvicer.GetRequiredService <TResponder>(); return await responder?.RespondAsync(request); })); }