RabbitMQ相关

一、RabbitMQ介绍

RabbitMQ 是高级消息队列协议(AMQP)的开源消息代理软件。可用于数据投递,非阻塞操作或推送通知,实现发布 / 订阅,异步处理,或者工作队列;

优点:

  • 可靠性:RabbitMQ 提供了各种功能,让你权衡性能与可靠性,其中包括持久性,交付确认和高可用性。
  • 灵活的路由:消息在到达队列之前,通过交换机的路由。RabbitMQ 为典型的路由逻辑提供了几个内置的交换机类型。对于更复杂的路由,则可以绑定几种交换机一起使用甚至可以自己实现交换机类型,并且把它作为一个插件的来使用。
  • 集群:在本地网络上的几个 RabbitMQ 服务器可以聚集在一起,作为一个独立的逻辑代理来使用。
  • 联合:对于服务器来说,它比集群需要更多的松散和非可靠链接。为此 RabbitMQ 提供了联合模型。
  • 高度可用队列:在群集中,队列可以被镜像到几个机器中,确保您的消息即使在出现硬件故障的安全。
  • 多协议:RabbitMQ 支持上各种消息传递协议的消息传送.
  • 许多客户端:有你能想到的几乎任何语言 RabbitMQ 客户端。
  • 管理用户界面:RabbitMQ 附带一个简单使用管理用户界面,允许您监视和控制您的消息代理的各个方面。
  • 追踪:如果您的消息系统行为异常,RabbitMQ 提供跟踪支持,让你找出问题是什么。
  • 插件系统:RabbitMQ 附带各种插件扩展,并且你也可以写你自己插件.

二、软件安装

系统环境:Ubuntu

sudo apt-get install –y rabbitmq-server; 安装服务

sudo service rabbitmq-server start;启动服务

如果要调整系统限制,比如打开文件的句柄数量

可以编辑/etc/default/rabbitmq-server 注释 unlimit –n 1024;

less  /var/log/rabbitmq/rabbitmq@主机名.log  ;查看rabbitmq的日志;

  • RabbitMQ 使用的是 AMQP 协议。要使用 rabbitmq,你需要一个库来解读这个协议。几乎所有的编程语言都有可选择的库。python 也是一样,可以从以下几个库中选择,他们都可以实现 python 与 rabbitmq 的对接:
  • py-amqplib
  • txAMQP
  • pika

示例使用pika库进行连接AMQP协议

# 更新软件包列表

sudo apt-get update

# 安装所需要的依赖

sudo apt-get install -y python-pip git-core

# 更新 pip

sudo pip install --upgrade pip

# 安装 pika

sudo pip3 install pika

三、角色与配置

  • 发布者(producer):发布消息的应用程序
  • 队列(queue):用于消息存储的缓冲
  • 消费者(consumer):接收消息的应用程序

发布者(producer)只需把消息发送给一个交换机(exchange)。交换机非常简单,它一边从发布者接收消息,一边把消息消息推送到队列。交换机必须知道如何处理它接收的消息,是应该推送到指定的队列还是多个队列,或者是直接忽略消息。这些规则是通过交换机类型(exchange type)来定义的。

扇形交换机(fanout)很简单,你可能从名字上就能猜测出来,它把消息发送给所有的队列,这是我们日志系统所需要的。

channel.exchange_declare(exchange='logs', exchange_type='fanout')

使用 basic.qos 方法,并设置 prefetch_count=1。这样是告 RabbitMQ ,再同一时刻,不要发送超过 1 条消息给一个工作者(worker),直到它已经处理了上一条消息并且作出了响应。这样,RabbitMQ 就会把消息分发给下一个空闲的工作者(worker

channel.basic_qos(prefetch_count=1)

查看交换机

sudo service rabbitmq-server start;启动

sudo rabbitmqctl list_exchanges  ;查看交换机列表

exchange 参数就是交换机的名字。空字符串代表默认或者匿名交换机:消息将会根据指定的 routing_key 分发到指定的队列

channel.basic_publish( exchange='logs', routing_key='hello',body=message)

消息属性

AMQP协议给消息预定义了一系列的14个属性。大多数属性很少会用到,除了以下几个:

  • delivery_mode(投递模式):将消息标记为持久的(值为2)或暂存的(除了2之外的其他任何值)。 
  • content_type(内容类型):用来描述编码的mime-type。例如在实际使用中常常使用application/json来描述JOSN编码类型。
  • reply_to(回复目标):通常用来命名回调队列。
  • correlation_id(关联标识):用来将RPC的响应和请求关联起来。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Symoons

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值