赞
踩
AMQP,即Advanced Message Queuing Protocol,一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同产品,不同的开发语言等条件的限制。Erlang中的实现有RabbitMQ等。
AMQP 基于TCP协议之上再次封装的协议,AMQP定义了合适的服务器端域模型,规范服务器的行为(AMQP的服务器端称broker),
消息中间件的主要功能就是消息的 路由(routing) 和 缓存(Buffering)
AMQP提供了两个重要的模型,Exchange(交换机) 和 Queue (队列)
Exchange的作用
Exchange接收Producer发送的Message,根据不同的路由算法,将Message发送给Message Queue.
Message Queue的作用
注意,如果队列没有指定交换机,则使用 Default 默认交换机
核心概念
(不具备消息存储的能力)
上图为生产者生产消息与消费者订阅并消费消息的大致流程图
具体的模式案例请参考官网:www.rabbitmq.com/getstarted.…
工作队列和发布订阅/广播模式用的比较多! 路由模式会消耗一定的内存,要加where筛选过滤
解耦、削峰、异步
串行和并行
串行方式: 将订单信息写入数据库成功后,发送注册邮件,再发送注册短信,以上三个任务全部完成后,返回给客户端
并行方式 异步线程池
并发方式:将订单信息写入数据库成功后,发送注册邮件的同时,发送注册短信,以上三个任务全部完成后,返回给客户端,与串行的差别是,并行的方式可以提高处理的时间
存在的问题
使用MQ异步消息队列的好处
完全解耦,用MQ建立桥接
有独立的线程池和运行模型
出现了消息丢失,MQ有持久化功能
如何保证消息的可靠性,死信队列和消息转移的等
如果服务器承载不了,你需要自己去写高可用,HA镜像模型高可用。
按照以上约定,用户的响应时间相当于是订单信息写入数据库的时间,也就是50毫秒。注册邮件,发送短信写入消息队列后,直接返回,因此写入消息队列的速度很快,基本可以忽略,因此用户的响应时间可能是50毫秒。因此架构改变后,系统的吞吐量提高到每秒20 QPS。比串行提高了3倍,比并行提高了两倍
因此MQ消息队列适用于
MQ消息队列可达到 高内聚、低耦合
RabbitMQ是Spring家族开发的产品,Spring 天然支持RabbitMQ,快速方便引入RabbitMQ!
这里我们介绍 SpringBoot 整合RabbitMQ 实现消息的生产与消费(广播模式/发布订阅模式)
File ---> New ---> Project ---> Maven ---> 直接Next 进入下一步创建普通的Maven工程即可
创建一个默认的Maven聚合工程,将src文件夹删除,该工程就是一个Maven聚合工程
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。