龙空技术网

重新认识(MQ)消息队列

会飞的企鹅34482434 2078

前言:

目前看官们对“消息队列消息格式”大概比较讲究,小伙伴们都需要分析一些“消息队列消息格式”的相关知识。那么小编同时在网络上网罗了一些关于“消息队列消息格式””的相关知识,希望朋友们能喜欢,大家一起来了解一下吧!

消息队列的意义

消息队列有多重要,在单体架构的应用里,用的比较少,但在分布式和微服务的架构里,消息队列是作为一个基础组件的存在,对它的性能、容量、稳定性、延时、高可用的追求没有最高,只有更高,比应用服务还的要求还高。被用在解耦、异步、流量削锋、通讯,在大数据、实时计算领域,应用广泛。

消息队列定义

单独对消息的收、发进行管理,确保消息的成功传递。提供异步通信,消息生产者只要将消息放入队列中即可。

只要消息格式不变,即使接收者的接口、位置、或者配置改变,也不会给发送者带来任何改变, 使系统之间的耦合度降到数据级。而且,消息发送者无需知道消息接收者是谁,使得系统设计更清晰

消息队列类型优先级队列:不同于先进先出的队列,优先级高的消息具备优先被消费的特权,这样可以为下游提供不同级别的消息保证。如果消费者的消费速度大于生产者的速度,这种优先级的设置没有意义。延迟队列:消息被发送之后,等待特殊时间后,消费者才拿到这个消息。延迟队列一般分两种:基于消息的延迟基于队列的延迟RabbitMQ借助消息的TTL(Time To Live)和死信队列可以实现延迟消息。死信队列可以实现延迟消息。 死信队列:消息没有被正确投递,可以进入死信队列;回退队列:如果消费者在消费时发生异常,没有进行ACK,进而发生回滚消息的操作之后消息始终会放在队列的顶部,然后不断被处理和回滚,导致队列陷入死循环。为解决这个问题,可以设置回退队列。重试队列:可以看成一种回退队列,具体指消费端消费消息失败时,为防止消息无故丢失而重新将消息回滚到 Broker 中消息投递模式点对点P2P

每个消息只有一个消费者(Consumer),消息被消费之后就不再队列中了。发送接收者之间没有依

赖,不管消息接收者是否运行,它不会影响消息被发送到消息队列。接收者在成功接收消息后需要向消息队列应答成功。

发布订阅(Pub/Sub)模式

包含三角色:主题(Topic),发布者(Publisher),订阅者(Subscriber),发布者将消息发送到Topic,系统把消息传递给多个订阅者。

每个消息可以有多个订阅者,发布者和订阅者在时间上有依赖,必须订阅之后才会收到发布者的消息。

消费模式

消费者获取消息模式

推模式是指由 Broker 主动推送消息至消费端,实时性较好,不过需要一定的流制机制来确保服务端推送过来的消息不会压垮消费端。

拉模式是指消费端主动向 Broker 端请求拉取(一般是定时或者定量)消息,实时性较推模式差,但是可以根据自身的处理能力而控制拉取的消息量。

消息的幂等性

确保消息在生产者和消费者之间进行传输,一般有三种传输保障(Delivery Guarantee):

At most once: 至多一次,消息可能丢失,但绝不会重复传输。At least once: 至少一次,消息绝不会丢,但是可能会重复。Exactly once: 精确一次,每条消息肯定会被传输一次且仅一次。消息队列的作用应用解耦

订单系统并不需要关心库存系统是否正常,库存系统也不需要关心订单系统的IP地址

异步处理

如果是同步调用,时间会比较长,现在异步后。只要消息放入队列就不管了。

流量削锋

流量削锋,主要是上流系统瞬间流量很大,可能会压跨下游系统,引起系统的雪漰,如果中间有消息队列,给系统一个写操作缓冲。这个被用在秒杀地业务场景。

标签: #消息队列消息格式