目录
一、消息中间件
客户端和服务器进行异步通讯
同步缺点:阻塞,超时,数据不一致
接口重复提交解决方式:token(令牌)+图形验证码
为什么使用消息中间件?
解决高并发,两种通讯:1点对点通讯(一对一),2发布订阅(一对多),异步通讯(无需等待)-- 消息模型
1点对点(队列)
生产者:发送消息,提高接口
消费者:调用接口
为什么mq能够解决高并发?
缓存,进行排队,队列可以做持久化,存放消息地址
通讯方式--点对点和发布订阅
消息中间件应用场景
多线程+补偿机制--麻烦
用户注册,订单系统,库存系统--点对点通讯
极光,融云,环信---发布订阅
MQ产品的分类
RabbitMQ
是使用Erlang编写的一个开源的消息队列,本身支持很多的协议:AMQP,XMPP, SMTP, STOMP,也正是如此,使的它变的非常重量级,更适合于企业级的开发。同时实现了一个经纪人(Broker)构架,这意味着消息在发送给客户端时先在中心队列排队。对路由(Routing),负载均衡(Load balance)或者数据持久化都有很好的支持。
Redis
是一个Key-Value的NoSQL数据库,开发维护很活跃,虽然它是一个Key-Value数据库存储系统,但它本身支持MQ功能,所以完全可以当做一个轻量级的队列服务来使用。对于RabbitMQ和Redis的入队和出队操作,各执行100万次,每10万次记录一次执行时间。测试数据分为128Bytes、512Bytes、1K和10K四个不同大小的数据。实验表明:入队时,当数据比较小时Redis的性能要高于RabbitMQ,而如果数据大小超过了10K,Redis则慢的无法忍受;出队时,无论数据大小,Redis都表现出非常好的性能,而RabbitMQ的出队性能则远低于Redis。
|
入队 |
出队 |
||||||
|
128B |
512B |
1K |
10K |
128B |
512B |
1K |
10K |
Redis |
16088 |
15961 |
17094 |
25 |
15955 |
20449 |
18098 |
9355 |
RabbitMQ |
10627< |