1.什么是MQ,有什么用?
MQ 是message queue ,消息队列,也叫消息中间件,遵守JMS(java message service)规范的一种软件。(同时还有另一个叫AMQP的应用层协议,语言无关性不受产品 语言等限制,rabbitMQ支持这个 )
是类似于数据库一样需要独立部署在服务器上的一种应用,提供接口给其他系统调用。
主要用于各个系统之间通信的解耦。
举例:
比如登陆系统,在登陆之后需要调用短信系统给用户发短信说已经登陆,同时还需要调用日志系统记录登陆日志,需要调用积分系统对登陆签到的积分进行增加 等等等。
这种情况下,登陆系统和日志系统,短信系统,积分系统等等 强耦合,其中存在可能调用失败,信息丢失等风险,同时会提高系统复杂度。
比如说登陆之后调用日志系统失败,那么该次登陆的日志信息就会丢失,无法再找回。
而且顺序执行,会导致登陆系统运行效率低。
那么如果使用消息中间件,登陆之后只需要将任务推入到消息队列中,就不用去管了。其他系统则从队列中去获取任务。
实现解耦和异步调用 (异步是相对于同步而言,同步是就等待,当系统执行某个任务的时候,一定要等到该任务结束,系统才会继续往下执行,异步则不等待。)
同时还有可以实现横向拓展 安全可靠优点
2.常见MQ的类型
activeMQ 对java支持良好,缺点是对其他语言支持不够友好,适合中小企业系统
rabbitMQ 对java支持良好,对其他语言也支持良好,跨平台,语言无关
kaffka 日志消息中间件 支持大数据场景
3.JMS规范
MQ实现参照了jms规范,(规范就是一种约定)
该规范中包括
提供者:实现jms规范的中间件服务器
客户端:发送或者接受消息的应用程序
生产者/发布者:创建并发送消息的客户端
消费者/订阅者:接受并处理消息的客户端