Beispiel #1
0
        public void Send(Event @event, CancellationToken cancellationToken)
        {
            var eventPipeline = pipeline.Describe(@event.GetType().Name).Build(HandlerType.Publish);

            var connection = this.connectionProvider.GetConnection();

            using (var channel = connection.Connect(cancellationToken, (channel, connectionInfo) =>
            {
                channel.BasicReturn += Channel_BasicReturn;
            }))
            {
                try
                {
                    var stream  = this.CreateStream(channel, connection);
                    var context = this.CreateContext(@event, channel, stream);

                    eventPipeline?.Execute(context, new EventMessage());
                    if (stream.Body.Length == 0)
                    {
                        context.WriteMessageToPublish(Encoding.UTF8.GetBytes(rabbitMessageSerializer(@event)), GetBasicProperties(channel, @event));
                        return;
                    }
                }
                catch (Exception ex)
                {
                    this.logger.LogError(ex, $"An error occurred when try to publish the event {@event.EventName}");
                }
            }
        }
Beispiel #2
0
 public RabbitMQSubscription(Type subscriptionType, IServiceProvider serviceProvider, RabbitPipeline rabbitPipeline)
 {
     this.subscriptionType     = subscriptionType;
     this.serviceProvider      = serviceProvider;
     this.receiveExecutionPipe = rabbitPipeline
                                 .Describe <T>()
                                 .Use(this)
                                 .Build(HandlerType.Receive);
 }