/// <summary> /// 添加交换机监听 /// </summary> /// <param name="builder"></param> /// <param name="exchange"></param> /// <param name="queue"></param> /// <param name="onMessageRecieved"></param> /// <returns></returns> public static IRabbitConsumerBuilder AddListener(this IRabbitConsumerBuilder builder, string exchange, string queue, Action <RecieveResult> onMessageRecieved) { return(builder.AddListener(exchange, queue, (_, result) => { onMessageRecieved?.Invoke(result); })); }
/// <summary> /// 添加自定义监听 /// </summary> /// <param name="builder"></param> /// <param name="exchange"></param> /// <param name="queue"></param> /// <param name="listenerType"></param> /// <returns></returns> public static IRabbitConsumerBuilder AddListener(this IRabbitConsumerBuilder builder, string exchange, string queue, Type listenerType) { if (!typeof(IRabbitConsumerListener).IsAssignableFrom(listenerType) || !listenerType.IsClass || listenerType.IsAbstract) { throw new ArgumentException($"the listener type must be implement IRabbitConsumerListener and none abstract class", "listenerType"); } builder.Services.AddTransient(listenerType); return(builder.AddListener(exchange, queue, (serviceProvider, result) => { var listenner = serviceProvider.GetService(listenerType) as IRabbitConsumerListener; listenner.ConsumeAsync(result).Wait(); })); }
/// <summary> /// 添加自定义监听 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="builder"></param> /// <param name="exchange"></param> /// <param name="queue"></param> /// <returns></returns> public static IRabbitConsumerBuilder AddListener <T>(this IRabbitConsumerBuilder builder, string exchange, string queue) where T : class, IRabbitConsumerListener { return(builder.AddListener(exchange, queue, typeof(T))); }