RabbitMQ 使用场景

Java
514
0
0
2022-04-14
标签   RabbitMQ

1.1 同步异步问题(串行)

串行方式:将订单信息写入数据库成功后,发送注册邮件,再发送短信。以上三个任务全部完成后,返回给客户端。

public void makrOrder() {
// 1.订单保存
orderService.saveOrder();
// 2.发送短信服务
messageService.sendSMS("order");
// 3.发送email服务
emailService.sendEmail("order");
// 4.发送 APP 服务
appService.sendApp("order");
}

1.2 并行方式 异步线程池

并行方式:将订单信息写入数据库成功后,发送注册邮件的同时,发送注册短信。以上三个任务完成后,返回给客户端。与串行的差别是,并行的方式可以提高处理的时间。
缺点:需要自己维护线程池、持久性、高可用,高可用都需要自己实现,最重要的是耦合在应用程序中。
public void makeOrder() {
// 1.保存订单
orderService.saveOrder();
// 发送
relationMessage();
}
public void relationMessage() {
// 异步
threadpool.submit(new Callable<Object>{
public Object call() {
// 发送短信服务
messageService.sendSMS("order");
}
});
// 异步
threadpool.submit(new Callable<Object>{
public Object call() {
// 发送email服务
messageService.sendEmail("order");
}
});
// 异步
threadpool.submit(new Callable<Object>{
public Object call() {
// 发送email服务
messageService.sendApp("order");
}
});
}

1.3 异步消息队列

完全解耦,用 MQ 建立桥梁

有独立的线程池和运行模块

出现了消息坑会丢失,MQ 有持久化功能

如何保证消息的可靠性,死信队列和消息转移等

如果服务器承载不了,需要自己去写高可用,HA 镜像模型高可用

public void makeOrder() {
orderService.saveOrder();
rabbitTemplate.convertSend("ex","2","消息内容");
}

2、高内聚,低耦合

3、流量的削峰

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

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

6、流量监控

7、日志监控(ELK)

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