MQ使用场景
MQ在实际应用中应用还是比较普遍的。目前就工作中遇到的场景能使用的地方主要为以下几种情况
1、利用队列,实现削峰填谷,减缓峰值时服务器压力
2、利用消息的发布/订阅(Publish/Subscribe)机制,可以优化业务执行逻辑。
比如订单下单,主流程应该是支付成功即可下单成功。积分变动、微信推送、短信推送、等等其他的操作可以通过订阅的方式完成,而不是写在主流程中。
3、服务降级
同样是上述的场景,如果流量较大,可以将部分消息持久化,暂时不处理。将服务器应用于更加核心的功能处理。系统峰值过后,再处理消息,从而实现服务降级处理
以上是用于业务解耦的情况,其它常见场景包括最终一致性、广播、错峰流控等等
4、处理微信公众服务端重发。做过微信公众号应该都知道微信公众号开发有一个比较恶心的重发问题。如果在较短时间内无法响应,微信会丢弃原有请求,重新发起http请求到服务端,如果服务端没有做好校验,容易出现交易重发。之前我们在生产就出现过一次重复放贷(后续可以聊聊支付中如何确保不会发生重复交易)。
使用MQ可以在服务端接收请求后就返回前端。后续的交易可以使用ajax轮询或者http websocket推送的方式完成后续的交易。
windows RabbitMQ 安装
1、RabbitMQ基于erlang,本机必须先安装erlang,下载地址
2、下载RabbitMQ,下载地址
3、安装erlang
一路next即可。
如果为Windows,打开开始菜单,里面会有一个Erlang的执行文件。
环境变量中会新增一个配置项
ERLANG_HOME
d:\Program Files\erl9.2
4、安装RabbitMQ
执行文件一路next即可
检查是否安装成功
有几个地方需要注意
1.hosts文件中要有127.0.0.1 localhost的对应
2..erlang.cookie文件有三个路径,要统一
C:\Windows\System32\config\systemprofile
C:\Users\lenovo(用户名)
C:\Windows(如果为高版本,应该没有此路径,可以不考虑)
服务未启动执行rabbitmqctl status
最后有提示
Current node details:
- node name: ‘rabbitmqcli52@wenyao-PC’
- effective user’s home directory: C:\Users\lenovo
- Erlang cookie hash: aXFZrVZ2A9gF0kkNeMhRXA==
Erlang cookie hash,值与上面的.erlang.cookie文本内内容一致(.erlang.cookie为只读,注意修改)
推荐阅读此文章,详细介绍了MQ,及MQ的几大组成。同时提供了java demo帮助消化理解
https://www.jianshu.com/p/79ca08116d57