• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

消息队列和案例

武飞扬头像
laufing
帮助1

python内置队列

  • 标准库queue
  • 提供Queue队列、LifoQueue栈、PriorityQueue优先级队列
  • 用于单机的生产者、消费者缓冲队列;
     
    生产者,生产消息的进程或线程;
    消费者,使用消息的进程或者线程;
     

先进先出的队列Queue

pending…

在这里插入代码片

分布式队列

用于不同的应用程序/主机之间通信。

rabbitmq

  • erlang语言实现,比较稳定;
  • 基于AMQP协议,不限制实现语言,可以python/java/go等
  • client/server模式,目前最流行的消息队列之一;
  • 应用:系统解耦;解决高并发、秒杀,减轻服务器压力(流量消峰);
  • 分布式系统,集成系统之间对接;
  • 异步任务处理;
  • 其他竞品kafka(日志采集)、RocketMQ(java实现高并发)

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进行转发到相应的队列中,消费者从声明的队列中获取消息,进行消费。

  1. 安装rabbitmq (以windows为例,其他系统参考官网)
  • 首先安装erlang运行环境;下载安装后(bin)配置环境变量;
  • 下载rabbitmq并安装,根据自己的操作系统及erlang版本选择兼容版本;
  • 运行rabbitmq 服务,进入安装目录的sbin下,终端输入rabbitmqctl start_app
  • 启动插件管理 rabbitmq-plugins enable rabbitmq_management
  • 查看状态 rabbitmqctl status,如下为成功;(shutdown关闭服务器)
    学新通
    浏览器打开UI界面,可以使用guest/guest登录。
    学新通
    登录成功,如下:
    学新通
    linux(ubuntu)安装: sudo apt-get install rabbitmq-server
     
  1. rabbitmq工作模式
  • 生产者、消费者模式
    • hello world ,一个生产者,一个消费者
    • work queue ,一个生产者,多个消费者
  • 发布、订阅模式
    • fanout 广播模式
    • direct 根据routing_key定向模式
    • topic模式,根据正则匹配routing_key进行转发消息。
  • rpc模式
     
     
  1. Ubuntu1804 安装rabbitmq
  • 安装erlang
# apt安装
sudo apt-get install erlang-nox
# 更新源列表
sudo apt-get upgrade
  • 安装rabbitmq
sudo apt-get install rabbitmq-server
# 查看状态
rabbitmqctl status

如下为成功状态:
学新通

  • 开启web 界面管理
# 开启插件管理
rabbitmq-plugins enable rabbitmq_management

# 浏览器打开
# http://localhost:15672
# guest: guest 访问

学新通

rocketmq

  • 基于JMS实现,仅支持java语言;

redis list 队列

pending…

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhghfifa
系列文章
更多 icon
同类精品
更多 icon
继续加载