예제 #1
0
        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);
        }
예제 #2
0
        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);
            }
        }
예제 #3
0
        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);
        }