Ejemplo n.º 1
0
 /// <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);
     }));
 }
Ejemplo n.º 2
0
 /// <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);
     }));
 }
Ejemplo n.º 3
0
 /// <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;
     }));
 }
Ejemplo n.º 4
0
 /// <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);
     }));
 }
Ejemplo n.º 5
0
 /// <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);
     }));
 }
Ejemplo n.º 6
0
 /// <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);
 }
Ejemplo n.º 7
0
        /// <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);
        }
Ejemplo n.º 8
0
        /// <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);
        }
Ejemplo n.º 9
0
 /// <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));
 }
Ejemplo n.º 10
0
 /// <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));
 }
Ejemplo n.º 11
0
 /// <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)));
 }
Ejemplo n.º 12
0
 /// <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>(""));
 }
Ejemplo n.º 13
0
 /// <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));
 }
Ejemplo n.º 14
0
 /// <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>(""));
 }
Ejemplo n.º 15
0
 /// <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));
 }
Ejemplo n.º 16
0
 /// <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));
 }
Ejemplo n.º 17
0
 /// <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));
 }
Ejemplo n.º 18
0
 /// <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);
     }));
 }