zoukankan      html  css  js  c++  java
  • RabbitMQ公共配置

    /**
     * 消息队列枚举配置
     * Created by macro on 2018/9/14.
     */
    @Getter
    public enum QueueEnum {
        /**
         * 消息通知队列
         */
        QUEUE_ORDER_CANCEL("mall.order.direct", "mall.order.cancel", "mall.order.cancel"),
        /**
         * 消息通知ttl队列
         */
        QUEUE_TTL_ORDER_CANCEL("mall.order.direct.ttl", "mall.order.cancel.ttl", "mall.order.cancel.ttl");
    
        /**
         * 交换名称
         */
        private String exchange;
        /**
         * 队列名称
         */
        private String name;
        /**
         * 路由键
         */
        private String routeKey;
    
        QueueEnum(String exchange, String name, String routeKey) {
            this.exchange = exchange;
            this.name = name;
            this.routeKey = routeKey;
        }
    }
    /**
     * 消息队列相关配置
     * Created by macro on 2018/9/14.
     */
    @Configuration
    public class RabbitMqConfig {
    
        /**
         * 订单消息实际消费队列所绑定的交换机
         */
        @Bean
        DirectExchange orderDirect() {
            return (DirectExchange) ExchangeBuilder
                    .directExchange(QueueEnum.QUEUE_ORDER_CANCEL.getExchange())
                    .durable(true)
                    .build();
        }
    
        /**
         * 订单延迟队列队列所绑定的交换机
         */
        @Bean
        DirectExchange orderTtlDirect() {
            return (DirectExchange) ExchangeBuilder
                    .directExchange(QueueEnum.QUEUE_TTL_ORDER_CANCEL.getExchange())
                    .durable(true)
                    .build();
        }
    
        /**
         * 订单实际消费队列
         */
        @Bean
        public Queue orderQueue() {
            return new Queue(QueueEnum.QUEUE_ORDER_CANCEL.getName());
        }
    
        /**
         * 订单延迟队列(死信队列)
         */
        @Bean
        public Queue orderTtlQueue() {
            return QueueBuilder
                    .durable(QueueEnum.QUEUE_TTL_ORDER_CANCEL.getName())
                    .withArgument("x-dead-letter-exchange", QueueEnum.QUEUE_ORDER_CANCEL.getExchange())//到期后转发的交换机
                    .withArgument("x-dead-letter-routing-key", QueueEnum.QUEUE_ORDER_CANCEL.getRouteKey())//到期后转发的路由键
                    .build();
        }
    
        /**
         * 将订单队列绑定到交换机
         */
        @Bean
        Binding orderBinding(DirectExchange orderDirect,Queue orderQueue){
            return BindingBuilder
                    .bind(orderQueue)
                    .to(orderDirect)
                    .with(QueueEnum.QUEUE_ORDER_CANCEL.getRouteKey());
        }
    
        /**
         * 将订单延迟队列绑定到交换机
         */
        @Bean
        Binding orderTtlBinding(DirectExchange orderTtlDirect,Queue orderTtlQueue){
            return BindingBuilder
                    .bind(orderTtlQueue)
                    .to(orderTtlDirect)
                    .with(QueueEnum.QUEUE_TTL_ORDER_CANCEL.getRouteKey());
        }
    
    }
    /**
     * 取消订单消息的生产者
     * Created by macro on 2018/9/14.
     */
    @Component
    public class CancelOrderSender {
        private static Logger LOGGER =LoggerFactory.getLogger(CancelOrderSender.class);
        @Autowired
        private AmqpTemplate amqpTemplate;
    
        public void sendMessage(Long orderId,final long delayTimes){
            //给延迟队列发送消息
            amqpTemplate.convertAndSend(QueueEnum.QUEUE_TTL_ORDER_CANCEL.getExchange(), QueueEnum.QUEUE_TTL_ORDER_CANCEL.getRouteKey(), orderId, new MessagePostProcessor() {
                @Override
                public Message postProcessMessage(Message message) throws AmqpException {
                    //给消息设置延迟毫秒值
                    message.getMessageProperties().setExpiration(String.valueOf(delayTimes));
                    return message;
                }
            });
            LOGGER.info("send orderId:{}",orderId);
        }
    }
    /**
     * 取消订单消息的消费者
     * Created by macro on 2018/9/14.
     */
    @Component
    @RabbitListener(queues = "mall.order.cancel")
    public class CancelOrderReceiver {
        private static Logger LOGGER =LoggerFactory.getLogger(CancelOrderReceiver.class);
        @Autowired
        private OmsPortalOrderService portalOrderService;
        @RabbitHandler
        public void handle(Long orderId){
            portalOrderService.cancelOrder(orderId);
            LOGGER.info("process orderId:{}",orderId);
        }
    }
  • 相关阅读:
    python爬虫requests json与字典对象互相转换
    python爬虫requests的使用
    Django 使用celery任务队列的配置
    Django实现发邮件
    leetcode算法:Two Sum II
    Python中使用hashlib进行加密的简单使用
    leetcode算法: Average of Levels in Binary Tree
    Django中自定义过滤器的使用
    linux下git常用命令
    cocos2d-x 父节点和子节点执行不同动作
  • 原文地址:https://www.cnblogs.com/wk-missQ1/p/14666984.html
Copyright © 2011-2022 走看看