Exemple #1
0
        public static IFlashApplicationBuilder UseRabbitMQ(this IFlashApplicationBuilder appBuilder, Action <IBus> setup)
        {
            var eventBus = appBuilder.app.ApplicationServices.GetRequiredService <IBus>();
            var logger   = appBuilder.app.ApplicationServices.GetRequiredService <ILogger <IBus> >();

            eventBus.Subscribe((Messages) =>
            {
                foreach (var message in Messages)
                {
                    logger.LogDebug($"ACK: queue {message.QueueName} route={message.RouteKey} messageId:{message.MessageId}");
                }
            }, async(obj) =>
            {
                foreach (var message in obj.Messages)
                {
                    logger.LogError($"NAck: queue {message.QueueName} route={message.RouteKey} messageId:{message.MessageId}");
                }

                //消息消费失败执行以下代码
                if (obj.Exception != null)
                {
                    logger.LogError(obj.Exception, obj.Exception.Message);
                }

                var events = obj.Messages.Select(message => message.WaitAndRetry(a => 5, 3)).ToList();
                var ret    = !(await eventBus.PublishAsync(events));

                return(ret);
            });

            setup?.Invoke(eventBus);
            return(appBuilder);
        }
Exemple #2
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="builder"></param>
 /// <param name="action"></param>
 /// <returns></returns>
 public static IFlashApplicationBuilder UseEventBus(this IFlashApplicationBuilder builder, Action <IServiceProvider> action)
 {
     action(builder.app.ApplicationServices);
     return(builder);
 }