public RabbitMQSubscribeMiddleware( IChannelPool channelPool, IRabbitMqSerializer serializer) { this.serializer = serializer; this.channelPool = channelPool; ChannelAccessor = channelPool.Acquire(ChannelQueueName, ConnectionName); QueueDeclareConfiguration QueueConfiguration = new QueueDeclareConfiguration(ChannelQueueName); QueueConfiguration.Declare(ChannelAccessor.Channel); var properties = ChannelAccessor.Channel.CreateBasicProperties(); properties.Persistent = true; Consumer = new EventingBasicConsumer(ChannelAccessor.Channel); Consumer.Received += (model, ea) => { var body = ea.Body.ToArray(); string message = (string)serializer.Deserialize(ea.Body.ToArray(), typeof(string)); Console.WriteLine(" [Subscribe] Received {0}", string.Format(message, DateTime.Now)); ChannelAccessor.Channel.BasicAck(deliveryTag: ea.DeliveryTag, multiple: false); }; ChannelAccessor.Channel.BasicConsume( queue: QueueConfiguration.QueueName, autoAck: false, consumer: Consumer ); }
public void Subscribe() { QueueDeclareConfiguration QueueConfiguration = new QueueDeclareConfiguration(ChannelQueueName); QueueConfiguration.Declare(ChannelAccessor.Channel); var properties = ChannelAccessor.Channel.CreateBasicProperties(); properties.Persistent = true; Consumer = new EventingBasicConsumer(ChannelAccessor.Channel); Consumer.Received += (model, ea) => { var body = ea.Body.ToArray(); string message = (string)serializer.Deserialize(ea.Body.ToArray(), typeof(string)); _logger.LogInformation(" [Subscribe] Received {0}", string.Format(message, DateTime.Now)); ChannelAccessor.Channel.BasicAck(deliveryTag: ea.DeliveryTag, multiple: false); }; ChannelAccessor.Channel.BasicConsume( queue: QueueConfiguration.QueueName, autoAck: false, consumer: Consumer ); }
public IRabbitMqMessageConsumer Create(ExchangeDeclareConfiguration exchange, QueueDeclareConfiguration queue, string connectionName = default) { var consumer = ServiceScope.ServiceProvider.GetRequiredService <RabbitMqMessageConsumer>(); consumer.Initialize(exchange, queue, connectionName); return(consumer); }
public void Initialize( [NotNull] ExchangeDeclareConfiguration exchange, [NotNull] QueueDeclareConfiguration queue, string connectionName = null) { Exchange = Check.NotNull(exchange, nameof(exchange)); Queue = Check.NotNull(queue, nameof(queue)); ConnectionName = connectionName; Timer.Start(); }
public void Publish(string message) { QueueDeclareConfiguration QueueConfiguration = new QueueDeclareConfiguration(ChannelQueueName); QueueConfiguration.Declare(ChannelAccessor.Channel); var properties = ChannelAccessor.Channel.CreateBasicProperties(); properties.Persistent = true; ChannelAccessor.Channel.BasicPublish( exchange: "", routingKey: QueueConfiguration.QueueName, basicProperties: properties, body: serializer.Serialize(string.Format(message, DateTime.Now)) ); _logger.LogInformation(" [RabbitBasicDemo] Publish {0}", string.Format(message, DateTime.Now)); }
public void Subscribe() { var consumers = typeFinder.Find(t => t.IsClass && !t.IsAbstract && typeof(IRabbitMQConsumer).IsAssignableFrom(t)); foreach (var item in consumers) { var obj = iocResolver.Resolve(item); Type messageType = (Type)item.InvokeMember("GetMessageType", System.Reflection.BindingFlags.InvokeMethod, null, obj, null); ExchangeDeclareConfiguration exchange = (ExchangeDeclareConfiguration)item.InvokeMember("GetExchangeDeclare", System.Reflection.BindingFlags.InvokeMethod, null, obj, null); QueueDeclareConfiguration queue = (QueueDeclareConfiguration)item.InvokeMember("GetQueueDeclare", System.Reflection.BindingFlags.InvokeMethod, null, obj, null); QOSConfiguration qOS = (QOSConfiguration)item.InvokeMember("GetQOSConfiguration", System.Reflection.BindingFlags.InvokeMethod, null, obj, null); string ConnectionName = (string)item.InvokeMember("GetConnectionName", System.Reflection.BindingFlags.InvokeMethod, null, obj, null); var consumer = consumerFactory.Create( exchange, //new ExchangeDeclareConfiguration( // ExchangeName, // ExchangeType, // durable: Durable //), queue, //new QueueDeclareConfiguration( // QueueName, // durable: Durable, // exclusive: Exclusive, // autoDelete: AutoDelete //), qOS, ConnectionName ); consumer.OnMessageReceived((model, ea) => { var eventName = ea.RoutingKey; var eventData = objectSerializer.Deserialize(messageType, ea.Body); var task = (Task)item.InvokeMember("ConsumeAsync", System.Reflection.BindingFlags.InvokeMethod, null, obj, new[] { eventData }); return(task); }); string routingKey = (string)item.InvokeMember("GetRoutingKey", System.Reflection.BindingFlags.InvokeMethod, null, obj, null); consumer.BindAsync(routingKey); Consumers.Add(item, consumer); Console.WriteLine("1"); } }
public Task InvokeAsync(HttpContext context, RequestDelegate next) { QueueDeclareConfiguration QueueConfiguration = new QueueDeclareConfiguration(ChannelQueueName); QueueConfiguration.Declare(ChannelAccessor.Channel); var properties = ChannelAccessor.Channel.CreateBasicProperties(); properties.Persistent = true; ChannelAccessor.Channel.BasicPublish( exchange: "", routingKey: QueueConfiguration.QueueName, basicProperties: properties, body: serializer.Serialize(string.Format(message, DateTime.Now)) ); Console.WriteLine(" [Publish] Publish {0}", string.Format(message, DateTime.Now)); return(next.Invoke(context)); }