厦门市城市建设档案馆网站每一天做网站
文章目录
- python内置队列
 - 先进先出的队列Queue
 
- 分布式队列
 - rabbitmq
 - rocketmq
 - redis list 队列
 
python内置队列
- 标准库queue
 - 提供Queue队列、LifoQueue栈、PriorityQueue优先级队列
 - 用于单机的生产者、消费者缓冲队列;
生产者,生产消息的进程或线程;
消费者,使用消息的进程或者线程;
 
先进先出的队列Queue
pending…
在这里插入代码片
 
分布式队列
用于不同的应用程序/主机之间通信。
rabbitmq
- erlang语言实现,比较稳定;
 - 基于AMQP协议,不限制实现语言,可以python/java/go等
 - client/server模式,目前最流行的消息队列之一;
 - 应用:系统解耦;解决高并发,减轻服务器压力;
 - 分布式系统,集成系统之间对接;
 
Broker:接收和分发消息的应用,RabbitMQ Server就是Message Broker。
 Virtual host:当多个用户使用同一个RabbitMQ Server时,可以划分出多个虚拟机,每个用户在自己的vhost创建exchange/queue等。
 Connection:publisher/consumer和broker之间的TCP连接。
 Channel:如果每一次访问RabbitMQ都建立一个Connection,在消息量大时建立TCP Connection的开销是巨大的,效率也非常低。Channel是在Connection内部建立的逻辑连接,通常每个thread会创建单独的Channel进行通信,channel之间是完全隔离的。Channel作为轻量级的Connection,极大减少了操作系统建立TCP连接的开销。
 生产者,生产消息的应用程序,将消息放入消息队列中。
 消费者,使用消息的应用程序,从消息队列中获取消息。
官网参考
  
 原理图:
 
 建立好连接后,生产者将消息交给exchange(交换机),由交换机根据routing_key进行转发到相应的队列中,消费者从声明的队列中获取消息,进行消费。
- 安装rabbitmq (以windows为例,其他系统参考官网)
 
- 首先安装erlang运行环境;下载安装后(bin)配置环境变量;
 - 下载rabbitmq并安装,根据自己的操作系统及erlang版本选择兼容版本;
 - 运行rabbitmq 服务,进入安装目录的sbin下,终端输入rabbitmqctl start_app
 - 启动插件管理 rabbitmq-plugins enable rabbitmq_management
 - 查看状态 rabbitmqctl status,如下为成功;(shutdown关闭)

浏览器打开UI界面,可以使用guest/guest登录。

登录成功,如下:

 
- rabbitmq工作模式
 
- 生产者、消费者模式 
- hello world ,一个生产者,一个消费者
 - work queue ,一个生产者,多个消费者
 
 - 发布、订阅模式 
- fanout 广播模式
 - direct 根据routing_key定向模式
 - topic模式,根据正则匹配routing_key进行转发消息。
 
 - rpc模式
 
- 使用rabbitmq
pending 
rocketmq
- 基于JMS实现,仅支持java语言;
 
redis list 队列
pending…
