环境安装:
1、下载服务器包
2、解压到测试文件夹下
3、设置必需的文件夹结构
/var/log/rabbitmq
/var/lib/rabbitmq/mnesia/rabbit
4、启动rabbitmq服务器 rabbitmq-server
5、检查服务器状态 rabbitmqctl status
消息:
有效载荷,可为任何内容
标签,描述有效载荷,rabbitmq用它决定谁将获得消息拷贝
信道:
应用程序和rabbit服务器创建后(通过认证)——》应用程序创建信道,信道是建立在“真实”TCP连接内的虚拟连接
AMQP通过信道将信息发送出去,每条信道都会被指派一个唯一的ID,在一条TCP连接上创建多少信道是没有限制的
发布消息,订阅队列,接收消息都是通过信道完成的
AMQP消息路由组成:交换器,队列和绑定
生产者把消息发布到交换器上,消息最终到达队列,并被消费者接收
绑定决定了消息如何从路由器路由到特定队列
消费者接收消息2种方式:
1、basic.consume
2、basic.get
Rabbit队列有多个消费者,消息以循环方式发送给消费者
消费者接收到每条消息必须进行确认
1、basic.ack
2、auto_ack
拒绝消息:basic.reject
在消息确认前,如果消费者断开连接后,rabbit会把消息投递给下一个消费者
队列是AMQP通信的基础模块:
1、为消息提供处所,消息在些等待消费
2、对负载均衡来说,队列是绝优方案,只需附加一堆消费者,并让RabbitMA以循环方式分配消息
3、队列是Rabbit中消息终点,除非消息进入黑洞
队列通过路由键绑定到交换器
服务器根据路由键将消息从交换器路由到队列
交换器类型:
direct
fanout
topic
AMQP架构中最关键的几个组件分别是交换器,队列和绑定
根据绑定规则将队列绑定到交换器
消息是发布到交换器的
有3种类型的交换器:direct fanout topic
基于消息路由键和交换器类型,服务器会决定将消息投递到哪个队列去
队列路由键更像是一种地址,标记
vhost:
相互隔离
rabbitmqctl add_vhost name
rabbitmqctl delete_vhost name
rabbitmqctl list_vhosts
持久化:
1、将投递模式选项设置为2
2、发送到持久化交换器
3、到达持久化队列
事务:
1、把信道设置为事务模式
2、发送方确认模式,将信道设为 confirm
开发:
发布者:
连接到时rabbitmq
获取信道
声明交换器
创建消息
发布消息
关闭信道
关闭连接
消费者:
连接到时rabbitmq
获取信道
声明交换器
声明队列
把队列和交换器绑定起来
消费消息
关闭信道
关闭连接
理解消息路由工作机制
把每个队列想象成节点上运行的进程,每个有自己进程ID,交换器不过是路由模式列表和匹配消息就发往的队列进程ID列表,当发布的消息匹配了交换器中的绑定规则时,实际上是由信道完成匹配工作,并在匹配之后建立到队列PID的连接,然后将消息传送过去,队列的进程ID本质是其在Erlang的地址。简单说,交换器是查询表,信道完成分配
https://github.com/m2492565210/rabbitmqwithpython3