RabbitMQ的使用场景

suaxi
2021-04-11 / 0 评论 / 36 阅读 / 正在检测是否收录...

1、解耦、削峰、异步

同步异步的问题(串行)

1.串行方式.png

串行方式:创建订单信息 ---> 发送注册邮件 ---> 再发送注册短信,完成以上三个步骤之后,返回给客户端。

public void order(){
    //1、创建订单
    orderService.saveOrder();
    //2、发送邮件
    emailService.sendEmail();
    //3、发送短信
    smsService.sendSMS();
    //4、发送app服务
    appService.sendApp();
}


并行方式 异步线程池

2.异步方式.png

并行方式:创建订单信息成功后,在发送注册邮件的同时,发送注册短信,完成以上步骤之后,返回给客户端。

public void order(){
    //1、创建订单
    orderService.saveOrder();
    //相关发送
    relationMessage();
}

public void relationMessage(){
    //异步
    threadPool.submit(new Callable<Object>{
        public Object sms(){
            //2、发送短信
            smsService.sendSMS();
        }
    })
    //异步
    threadPool.submit(new Callable<Object>{
        public void email(){
            //3、发送邮件
            emailService.sendEmail();
        }
    })
        
    ......
}

存在的问题:

  • 耦合度高
  • 需要维护自定义的线程池
  • 消息可能会丢失
  • 消息可靠性低
  • 需考虑服务器可用性的问题


异步消息队列方式

3.异步消息队列.png

优点:

1、完全解耦,使用MQ进行桥接

2、有独立的线程池和运行模式

3、消息持久化功能等


public void order(){
    //1、创建订单
    orderService.save();
    rabbitTemplate.convertSend("exchange","2","消息内容");
}


2、高内聚 低耦合

4.高内聚低耦合.png

图片来源:学相伴 飞哥-RabbitMQ


3、流量削峰


4、分布式事务的可靠消费和可靠生产


5、索引、缓存、静态化处理的数据同步


6、流量监控


7、日志监控(ELK)


8、下单、订单分发、抢票等

0

评论 (0)

取消