1.前言
1.1 为什么要用mq(应用场景)
1.1.1 异步处理
传统模式
传统模式的缺点:
一些非必要的业务逻辑以同步的方式运行,太耗费时间。
消息中间件模式
中间件模式的的优点:
将消息写入消息队列,非必要的业务逻辑以异步的方式运行,加快响应速度
1.1.2 应用解耦
传统模式
传统模式的缺点:
系统间耦合性太强,如上图所示,系统A在代码中直接调用系统B和系统C的代码,如果将来D系统接入,系统A还需要修改代码,过于麻烦!
消息中间件模式
中间件模式的的优点:
将消息写入消息队列,需要消息的系统自己从消息队列中订阅,从而系统A不需要做任何修改。
1.1.3 流量削峰
传统模式
传统模式的缺点:
并发量大的时候,所有的请求直接怼到数据库,造成数据库连接异常
消息中间件模式
中间件模式的的优点:
系统A慢慢的按照数据库能处理的并发量,从消息队列中慢慢拉取消息。在生产中,这个短暂的高峰期积压是允许的。
1.2 使用了消息队列会有什么缺点?
1.2.1 系统可用性降低
你想啊,本来其他系统只要运行好好的,那你的系统就是正常的。
现在你非要加个消息队列进去,那消息队列挂了,你的系统不是呵呵了。因此,系统可用性降低。
1.2.2 系统复杂性增加
要多考虑很多方面的问题,比如一致性问题、如何保证消息不被重复消费,如何保证消息可靠传输。
因此,需要考虑的东西更多,系统复杂性增大。
但是,我们该用还是要用的。
1.3 常见消息队列比较
1.4 常见术语
RabbitMQ 使用一些术语:生产者、队列、消费者。
1.4.1 生产者
一个发送消息的程序是一个生产者。
1.4.2 队列
队列类似于邮箱。虽然消息通过 RabbitMQ 在你的应用中传递,但是它们只能存储在队列中。队列只受主机的内存和磁盘限制的限制,它本质上是一个大的消息缓冲区。不同的生产者可以通过同一个队列发送消息,此外,不同的消费者也可以从同一个队列上接收消息。
1.4.3 消费者
一个等待接收消息的程序是一个消费者。
整个过程非常简单,生产者创建消息,消费者接收这些消息。你的应用程序既可以作为生产者向其他应用程序发送消息,也可以作为消费者,等待接收其他应用程序的消息。其中,存储消息的是消息队列,它类似于邮箱,消息通过消息队列进行投递。
2. RabbitMQ环境搭建(windows)
2.1 安装(windows)
1.下载并安装erlang,下载地址:http://www.erlang.org/download
2.配置erlang环境变量信息
新增环境变量ERLANG_HOME=erlang的安装地址
将%ERLANG_HOME%\bin加入到path中
3.下载并安装RabbitMQ,下载地址:http://www.rabbitmq.com/download.html
注意: RabbitMQ 它依赖于Erlang,需要先安装Erlang。
2.2 服务启动停止
2.3 访问地址
RabbitMQ 管理平台地址 http://127.0.0.1:15672
默认账号:guest/guest 用户可以自己创建新的账号
默认帐号guest是不允许远程登录。
2.4 创建用户
2.5 创建virtual host
2.6 rabbitmq web服务忘记用户名和密码
忘记账号密码,需要新增一个管理员账号,然后进去修改账号密码
在服务器上运行以下命令即可:(linux环境一下)
命令如下:
rabbitmqctl add_user newadmin newpassword
rabbitmqctl set_user_tags newadmin administrator
rabbitmqctl set_permissions -p / newadmin ".*" ".*" ".*"
3. Linux Centos6.5环境安装