RabbitMQ
概述
串行:业务中需要发请求,必须等请求响应过来了,才可以进行下一步的代码操作
消息传递:服务与服务之间 通过消息发送数据来通信,而不是互相调用
排队:指得是应用程序通过队列来通信
作用:
异步处理 A B C三个请求,B C不会影响A请求
解耦服务 避免每个服务之间的冗余联系
流量削峰 避免流量堆积
Linux安装
三个rpm包
1:erlang
2:socat
3:RabbitMQ
启动服务
shell
31 cd /usr/lib/rabbitmq/
32 ls
33 cd bin/
34 ls
35 rabbitmq-plugins enable rabbitmq_management
36 systemctl restart rabbitmq-server
37 systemctl start rabbitmq-server
38 systemctl status rabbitmq-server
三个端口
15672 web页面
25672 集群接口
5672 接收使用代码操作的端口
shell
[root@localhost bin]# netstat -anp|grep beam
tcp 0 0 0.0.0.0:15672 0.0.0.0:* LISTEN 20728/beam.smp
tcp 0 0 0.0.0.0:25672 0.0.0.0:* LISTEN 20728/beam.smp
tcp 0 0 127.0.0.1:59040 127.0.0.1:4369 ESTABLISHED 20728/beam.smp
tcp6 0 0 :::5672 :::* LISTEN 20728/beam.smp
unix 3 [ ] STREAM CONNECTED 43996 20728/beam.smp
unix 3 [ ] STREAM CONNECTED 49040 20728/beam.smp
[root@localhost bin]#
创建管理员
shell
[root@localhost ~]# rabbitmqctl add_user admin admin #添加用户
Adding user "admin" ...
[root@localhost ~]# rabbitmqctl set_user_tags admin administrator #绑定权限
Setting tags for user "admin" to [administrator] ...
[root@localhost ~]# rabbitmqctl change_password admin 123456 #修改密码
Changing password for user "admin" ...
管理界面
Connections:客户端和RabbitMQ所建立的连接
Channels:通道 传输数据
Exchanges:交换机 将数据转发到队列中
Queues:队列
Consumers:消费者
工作流程图
Broker:接收和分发消息的应用,RabbitMQ Server就是 Message Broker
Virtual host:出于多租户和安全因素设计的,把 AMQP 的基本组件划分到一个虚拟的分组中,类似于网络中的 namespace 概念。当多个不同的用户使用同一个 RabbitMQ server 提供的服务时,可以划分出多个vhost,每个用户在自己的 vhost 创建 exchange/queue 等
Connection:publisher/consumer 和 broker 之间的 TCP 连接
Channel:如果每一次访问 RabbitMQ 都建立一个 Connection,在消息量大的时候建立 TCP Connection的开销将是巨大的,效率也较低。Channel 是在 connection 内部建立的逻辑连接,如果应用程序支持多线程,通常每个thread创建单独的 channel 进行通讯,AMQP method 包含了channel id 帮助客户端和message broker 识别 channel,所以 channel 之间是完全隔离的。Channel 作为轻量级的 Connection 极大减少了操作系统建立 TCP connection 的开销
Exchange:message 到达 broker 的第一站,根据分发规则,匹配查询表中的 routing key,分发消息到queue 中去。常用的类型有:direct (point-to-point), topic (publish-subscribe) and fanout (multicast)
Queue:消息最终被送到这里等待 consumer 取走
Binding:exchange 和 queue 之间的虚拟连接,binding 中可以包含 routing key。Binding 信息被保存到 exchange 中的查询表中,用于 message 的分发依据