public static void DeadLetter(IModel channel, EventBusAttribute option) { var argEx = new Dictionary <string, object>(); var argQu = new Dictionary <string, object>(); argQu.Add("x-dead-letter-exchange", option.Exchange); argQu.Add("x-message-ttl", (int)option.Ttl.TotalMilliseconds); channel.ExchangeDeclare(_prefixDlqMake(option.Exchange), ExchangeType.Fanout, option.Durable, option.AutoDelete, argEx); channel.QueueDeclare(_prefixDlqMake(option.Queue), option.Durable, option.Exclusive, option.AutoDelete, argQu); channel.QueueBind(_prefixDlqMake(option.Queue), _prefixDlqMake(option.Exchange), option.RoutingKey); }
public void Publish <TMessage>(TMessage message) { using (var channel = RabbitMqCore.Connection.CreateModel()) { var option = EventBusAttribute.Parse(typeof(TMessage)); var body = message.Serialize().GetBytes(); RabbitMqCore.BuildContext(channel, option); RabbitMqCore.DeadLetter(channel, option); IBasicProperties properties = channel.CreateBasicProperties(); properties.DeliveryMode = option.DeliveryMode; channel.BasicPublish(option.Exchange, option.RoutingKey, option.Mandatory, properties, body); } }
public static void BuildContext(IModel channel, EventBusAttribute option) { var argEx = new Dictionary <string, object>(); var argQu = new Dictionary <string, object>(); argQu.Add("x-dead-letter-exchange", _prefixDlqMake(option.Exchange)); channel.ExchangeDeclare(option.Exchange, option.Type, option.Durable, option.AutoDelete, argEx); channel.QueueDeclare(option.Queue, option.Durable, option.Exclusive, option.AutoDelete, argQu); channel.QueueBind(option.Queue, option.Exchange, option.RoutingKey); }