消息中间件(理论篇)

什么是消息中间件?

MQ全称Message Queqe,消息队列是应用程序之间的通讯方法。(每秒并发达到几万)

为什么使用MQ?

在项目中,可将一些无需即时放回且耗时的操作提取出来,进行异步处理,而这种异步处理方式大大节省了服务器的请求响应时间,从而提高了系统的吞吐量。

消息队列应用场景

1.无需即时放回且耗时的操作
2.MQ相当于一个中介,生产方通过MQ与消费方交互,将应用程序进行解耦。
3.削峰填谷。高峰时期的并发操作转移到低峰时期去处理。消息被mq保存起来,系统按照自己的消费能力来消费,比如每秒一千个数据,就这样慢慢写入数据库,这样就不会卡死数据库了。
在这里插入图片描述

协议 AMQP 和 JMS

mq是消息通信的一种模型;实现mq的大致有两种主流方式:AMQP, JMS

AMQP

AMQP是一种协议,更准确的说是一种binary wire-level protocol (链接协议)。这是其和JMS的本质差别,AMQP不从API层进行限定,而是直接定义网络交换的数据格式。(也就是说你用什么语言都无所谓)

JMS

JMS即]ava消息服务(JavaMessage Service)应用程序接口,是一个java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。

AMQP与JMS区别

JMS是定义了统一 的接口,来对消息操作进行统一 ; AMQP是通过规定协议来统一 数据交互的格式
JMS限定了必须使用ava语言; AMQP只是协议,不规定实现方式,因此是跨语言的。
JMS规定了两种消息模式;而AMQP的消息模式更加丰富

消息队列产品

ActiveMQ:基于JMS
ZeroMQ:基于C语言开发
RabbitMQ:基于AMQP协议,erlang语言开发,稳定性好
RocketMQ:基于IMS,阿里巴巴产品
Kafka:类似MQ的产品;分布式滞息系统,高吞吐量

RabbitMQ简介

RabbitMQ是由erlang语言开发,基于AMQP (Advanced Message Queue高级消息队列协议)协议实现的消息队列,它是一种应用程序之间的通信方法, 消息队列在分布式系统开发中应用非常广泛。
官网: https://www.rabbitmq.com/

在这里插入图片描述

五种消息模型

  • 简单模型:一个生产者一个队列一个消费者
  • 工作模型:一个生产者一个队列多个消费者,一个消息只能被消费一次
  • 订阅模型之fanout:一个生产者一个交换机多个队列多个消费者,一个消息可以被多个消费者消费
  • 订阅模型之direct:一个生产者一个交换机多个队列多个消费者,routingKey一个消息发送给符合routingKey的队列
  • 订阅模型之topic:通配符,#匹配一个或多个 *:一个词

消息确认机制ACK

如果消费者领取消息后,还没执行操作就挂掉了呢?或者抛出了异常?消息消费失败,但是RabbitMQ无从得知,这样消息就丢失了!

因此,RabbitMQ有一个ACK机制。当消费者获取消息后,会向RabbitMQ发送回执ACK,告知消息已经被接收。不过这种回执ACK分两种情况

  • 自动ACK:消息一旦被接收,消费者自动发送ACK
  • 手动ACK:消息接收后,不会发送ACK,需要手动调用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值