消息队列遵循先进先出(FIFO),里面存放着消息。
-MQ 应用场景
1.异步处理,降低响应时间;
2.应用解耦,eg:用户下单后,订单系统完成持久化处理,同时将【消息】写入消息队列,直接返回订单下单成功。
库存系统:订阅下单的消息,从队列中获取下单信息,库存系统根据下单信息,进行后续的库存操作。
若库存系统不能正常使用,也不会影响订单系统的正常下单。
- RabbitMq
1.实现了AMQP协议,由Erlang语言写成。
2.RabbitMQ作为消息队列,可以接受并转发消息。可以把他理解为邮局:将需要发布的消息放在队列中间件中,最终会转发给消息接收方。
3.用武之地:一些无需立即返回且耗时的操作提取出来,进行异步处理
模式: - 点对点:一条消息,只会被一个接收端给接收到
- 发布/订阅模式:一个消息可以由多个消费者接收。
组件
- Message
消息:任何类型的数据都可以作为消息。每个消息有一个routing-key路由键。 - Publisher
消息的生产者,也是一个向Exchange交换器发布消息的客户端应用程序。 - Queue
消息队列,是消息的容器,用来保存消息。消息一直在队列里,直到消费者将其取走。 - Binding-key
队列绑定的binding-key。 - Exchange
交换器(路由),用来接收消息并将这些消息分发给服务器中的队列。
Exchange常见的类型有:
direct、fanout、topic、headers |
- 当交换器使用direct类型时:
消息中的 路由键(routing key)如果和 队列中的 binding key 一致, 交换器就将消息分发到队列中
。
2 fanout-广播形式
每个发送到 fanout 类型的交换器的消息都会分发到所有的队列上去。与routing-key和bingding-key无关,每个发送到交换器的消息都会被转发到与该交换器绑定的所有队列上
。
3 topic
topic 交换器通过路由键进行“模式匹配”。
将路由键routing key和绑定键binding key的字符串切分成单词.
这些单词之间用点隔开。允许两个通配符:
#代表任意N个单词,*代表一个单词。
每一个消息,有一个routingkey(标记、记号) 每一个队列,有一个bindingke
-
Consumer
消息的消费者,表示一个从消息队列中取得消息的客户端应用程序。 -
Linux环境安装RabbitMQ
-
安装Erlang环境
在根目录下创建一个myfile目录
#安装GCC编译器 GCC-C++ Openssl等模块
> yum -y install make gcc gcc-c++ kernel-devel m4 ncurses-devel
> openssl-devel
#wget命令在线下载(或者直接上传)
wget
> http://erlang.org/download/otp_src_18.2.1.tar.gz 或者直接上传
#解压
> tar -xvf otp_src_18.2.1.tar.gz
#进入otp_src_18.2.1目录,安装编译
> ./configure
#这一步需要很长时间,稍安勿躁
> make install
- 安装RabbitMQ
(1)下载rabbitmq-server-3.6.9.tar.xz或者直接上传
wget http://www.rabbitmq.com/releases/rabbitmq-server/v3.6.9/rabbitmq-server-generic-unix-3.6.9.tar.xz
(2)对rabbitmq包进行解压
tar -xvf rabbitmq-server-generic-unix-3.6.9.tar.xz
(3)配置rabbitmq的PATH环境变量
修改/etc/profile ,在末尾添加如下内容;
执行source /etc/profile刷新。
export PATH=/myfile/rabbitmq_server-3.6.9/sbin:$PATH
(4)进入rabbitmq的sbin目录下,执行如下命令。
#启动后台管理(rabbitmq有一个后台管理页面)
rabbitmq-plugins enable rabbitmq_management
# 后台运行rabbitmq
rabbitmq-server -detached
(5)添加用户(后台页面登录使用)
rabbitmqctl add_user admin admin
(6)添加权限
rabbitmqctl set_permissions -p "/" admin ".*" ".*" ".*"
(7)修改用户角色
rabbitmqctl set_user_tags admin administrator
- 3、测试访问后台管理页面
ip+端口: 端口是 15672 ui界面
eg:192.152.176.131:15672