消息的种类

1.1 按照发送的特点分

  1. 同步消息
  2. 异步消息
  3. 单向消息

举例:

  1. 同步消息
    我去小吃店要了一套煎饼果子,在门口等了十分钟,煎饼果子好了老板告诉我让我取餐。
  2. 异步消息
    我去小吃店要了一套煎饼果子,老板告诉我十分钟后就好。我就不用在门口干等着,可以去奶茶店喝杯奶茶、打把游戏,十分钟后去小吃店取餐。
  3. 单向消息
    我去小吃店要了一套煎饼果子,老板告诉我没有了,你不用等了。

关于消息队列为什么能减少拥堵:

  • A去小吃店要了一套煎饼果子,
    B去小吃店要了一份臭豆腐,
    C去小吃店要了一份烤冷面,
    老板拿了一个表格把三个人的需求记录了下来,然后告诉三个人A 10分钟之后来取,B 8分钟之后来取,C 5分钟之后来取。
    然后老板安心做小吃,可以把三份小吃的制作合理分配。ABC三人想干什么就去干什么,到了时间就过来取东西。

 

1)同步消息(可靠同步发送):

同步发送是指消息发送方发出数据后,会阻塞直到MQ服务方发回响应消息。应用场景:此种方式应用场景非常广泛,例如重要通知邮件、报名短信通知、营销短信系统等。


怎么解决消息队列的顺序消费 消息队列的处理方式_应用场景

关键代码:SendResult sendResult = producer.send(msg);

2)异步消息(可靠异步发送):

异步发送是指发送方发出数据后,不等接收方发回响应,接着发送下个数据包的通讯方式。MQ 的异步发送,需要用户实现异步发送回调接口(SendCallback),在执行消息的异步发送时,应用不需要等待服务器响应即可直接返回,通过回调接口接收服务器响应,    并对服务器的响应结果进行处理。应用场景:异步发送一般用于链路耗时较长,对 RT 响应时间较为敏感的业务场景,例如用户视频上传后通知启动转码服务,转码完成后通知推送转码结果等。


怎么解决消息队列的顺序消费 消息队列的处理方式_怎么解决消息队列的顺序消费_02

关键代码:producer.sendAsync(msg, new SendCallback() {//...});

3)单向(one-way)消息:

单向(Oneway)发送特点为只负责发送消息,不等待服务器回应且没有回调函数触发,即只发送请求不等待应答。此方式发送消息的过程耗时非常短,一般在微秒级别。应用场景:适用于某些耗时非常短,但对可靠性要求并不高的场景,例如日志收集。


怎么解决消息队列的顺序消费 消息队列的处理方式_怎么解决消息队列的顺序消费_03

单向只发送,不等待返回,所以速度最快,一般在微秒级,但可能丢失

关键代码:producer.sendOneway(msg);