pika

python之RabbitMQ

微笑、不失礼 提交于 2021-02-14 13:37:58
RabbitMQ队列 基础 安装erlang: http://www.erlang.org/downloads 安装rabbitmq: http://www.rabbitmq.com 安装rabbitmq moudle: pip install pika RabbitMQ介绍: http://www.rabbitmq.com/tutorials/tutorial-six-python.html RabbitMQ web 登入: http://localhost:15672 RabbitMQ是一个消息代理:它接受和转发消息,类似邮局的角色。 实例一: send端: 1 import pika 2 3 connection = pika.BlockingConnection(pika.ConnectionParameters( ' localhost ' )) # 建立连接 4 channel = connection.channel() # 声明一个管道 5 channel.queue_declare( ' hello ' ) # 声明一个队列 6 channel.basic_publish( 7 exchange= '' , 8 routing_key= ' hello ' , 9 body= ' Hello Word ' ) 10 # 发送消息 11 # routing_key

RabbitMQ持久化

荒凉一梦 提交于 2021-02-11 17:28:13
我们知道,如果消息接收端挂了,消息会保存在队列里。下次接收端启动就会接收到消息。 如果RabbitMQ挂了怎么办呢?这时候需要将消息持久化到硬盘 消息发送端:producer ........... # 建立管道 channel = connection.channel() # 声明队列 1、加上durable=True进行队列持久化。两边都要加(当RabbitMQ服务down了之后) channel.queue_declare(queue= " q1 " ,durable= True) # 发消息 channel.basic_publish(exchange= '' , routing_key = ' q1 ' , body = ' everything is just beginning! ' , # 3、加上这句话,对消息进行持久化,只需要在发送方写(RabbitMQ服务down了之后) properties=pika.BasicProperties(delivery_mode=2 )) ....... 消息接收端:consumer ......... # 建管道 channel = connection.channel() # 声明队列 2、加上durable=True进行队列持久化 channel.queue_declare(queue= ' q1 ' , durable

Rabbitmq_04 Routing

别说谁变了你拦得住时间么 提交于 2021-02-08 13:37:10
  前一篇博客中,交换区将接收到的消息转发给所有与之绑定的对列。本文介绍另一种模式,交换区根据消息的不同,将消息转发给特定的队列。 发送者 # !/usr/bin/env python import pika import sys connection = pika.BlockingConnection(pika.ConnectionParameters(host= ' localhost ' )) channel = connection.channel() # 注意exchange_type='direct' channel.exchange_declare(exchange= ' direct_logs ' , exchange_type = ' direct ' ) severity = sys.argv[1] if len(sys.argv) > 1 else ' info ' message = ' ' .join(sys.argv[2:]) or ' Hello World! ' # 发送消息 # 注意发送消息时的routing_key,后面向接收队列分发消息时,会用到routing_key channel.basic_publish(exchange= ' direct_logs ' , routing_key = severity, body = message)

管理博文 亿级QPS技术架构如何搭建?阿里全新开源2021高并发技术小册,简直不要太香!

依然范特西╮ 提交于 2021-02-06 00:01:22
基础 我之前也踩过一些坑, 参与的一个创业项目在初始阶段就采用了服务化的架构,但由于当时人力有限,团队技术积累不足,因此在实际项目开发过程中,发现无法驾驭如此复杂的架构,也出现了问题难以定位、系统整体性能下降等多方面的问题,甚至连系统宕机了都很难追查到根本原因,最后不得不把服务做整合,回归到简单的单体架构中。 所以我建议一般系统的演进过程应该遵循下面的思路: 最简单的系统设计满足业务需求和流量现状,选择最熟悉的技术体系。随着流量的增加和业务的变化,修正架构中存在问题的点,如单点问题,横向扩展问题,性能无法满足需求的组件。在这个过程中,选择社区成熟的、团队熟悉的组件帮助我们解决问题,在社区没有合适解决方案的前提下才会自己造轮子。当对架构的小修小补无法满足需求时,考虑重构、重写等大的调整方式以解决现有的问题。 以淘宝为例, 当时该业务从 0 到 1 的阶段是通过购买的方式快速搭建了系统。而后,随着流量的增长,淘宝做了一系列的技术改造来提升高并发处理能力,比如数据库存储引擎从MyISAM 迁移到 InnoDB,数据库做分库分表,增加缓存,启动中间件研发等。当这些都无法满足时就考虑对整体架构做大规模重构,比如说著名的“五彩石”项目让淘宝的架构从单体演进为服务化架构。正是通过逐步的技术演进,淘宝才进化出如今承担过亿QPS 的技术架构。 下面就为大家展示一份技术小册,需要的朋友点赞收藏

Rabbitmq_03 Publish/Subscribe

醉酒当歌 提交于 2021-01-10 00:03:49
  发布订阅模式,一条消息可被多个接收者接收。注意在上一篇的tasks模式中,虽然有多个接收者,但每条消息还是只被一个接收者接收的。 发送者 # !/usr/bin/env python import pika import sys connection = pika.BlockingConnection(pika.ConnectionParameters(host= ' localhost ' )) channel = connection.channel() # 指定了exchange的type channel.exchange_declare(exchange= ' logs ' , exchange_type = ' fanout ' ) message = ' ' .join(sys.argv[1:]) or " info: Hello World! " channel.basic_publish(exchange = ' logs ' , routing_key = '' , body = message) print ( " [x] Sent %r " % message) connection.close() 接收者 # !/usr/bin/env python import pika connection = pika.BlockingConnection

Can anyone please tell me what are the differences between pika and kombu messaging library in python?

杀马特。学长 韩版系。学妹 提交于 2020-12-30 04:53:32
问题 I want to use messaging library in my application to interact with rabbitmq. Can anyone please explain the differences between pika and kombu library? 回答1: Kombu and pika are two different python libraries that are fundamentally serving the same purpose: publishing and consuming messages to/from a message broker. Kombu has a higher level of abstraction than pika. Pika only supports AMQP 0.9.1 protocol while Kombu can support other transports (such as Redis). More generally, Kombu is more

python3之rabbitMQ

依然范特西╮ 提交于 2020-12-18 06:42:02
1、RabbitMQ介绍 RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现。AMQP 的出现其实也是应了广大人民群众的需求,虽然在同步消息通讯的世界里有很多公开标准(如 COBAR的 IIOP ,或者是 SOAP 等),但是在异步消息处理中却不是这样,只有大企业有一些商业实现(如微软的 MSMQ ,IBM 的 Websphere MQ 等),因此,在 2006 年的 6 月,Cisco 、Redhat、iMatix 等联合制定了 AMQP 的公开标准。 MQ全称为Message Queue, 消息队列 (MQ)是一种应用程序对应用程序的通信方法。应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们。消 息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通常是用于诸如 远程过程调用 的技术。排队指的是应用程序通过 队列来通信。队列的使用除去了接收和发送应用程序同时执行的要求。 消息队列技术是分布式应用间交换信息的一种技术;消息队列可驻留在内存或磁盘上,队列存储消息直到它们被应用程序读走;通过消息队列,应用程序可独立地执行--它们不需要知道彼此的位置、或在继续执行前不需要等待接收程序接收此消息。 MQ主要作用是接受和转发消息。 你可以想想在生活中的一种场景

RabbitMQ-2介绍

狂风中的少年 提交于 2020-12-16 04:28:34
简介 RabbitMQ:接受消息再传递消息,可以视为一个"邮局"。发送者和接受者通过队列来进行交互,队列的大小可以视为无限的,多个发送者可以发生给一个队列,多个接收者也可以从一个队列中接受消息。 code rabbitmq使用的协议是amqp,用于python的推荐客户端是pika pip install pika -i https://pypi.douban.com/simple/ 生产者:send.py import pika # 建立一个连接 connection = pika.BlockingConnection(pika.ConnectionParameters( 'localhost')) # 连接本地的RabbitMQ服务器 channel = connection.channel() # 获得channel 这里链接的是本机的,如果想要连接其他机器上的服务器,只要填入地址或主机名即可。 接下来我们开始发送消息了,注意要确保接受消息的队列是存在的,否则rabbitmq就丢弃掉该消息. channel.queue_declare(queue='hello') # 在RabbitMQ中创建hello这个队列 channel.basic_publish(exchange='', # 使用默认的exchange来发送消息到队列 routing_key='hello', #

pika rabbitmq docker with tls-gen connection reset, no logs

浪尽此生 提交于 2020-12-14 23:58:25
问题 I've configured a docker w rabbitmq, copied the certs from tls-gen there, stop/started and I can only get the connection established and a server reset right after sending a TLS Client Hello. No useful message from ssl. Logs all empty. Troubleshoot TLS guide didn't help. Thanks for any help. docker run -d -it --hostname=[REDACTED] -e RABBITMQ_LOGS=/var/log/rabbitmq/ -e RABBITMQ_SASL_LOGS=/var/log/rabbitmq/ -e RABBITMQ_DEFAULT_USER=[REDACTED] -e RABBITMQ_DEFAULT_PASS=[REDACTED] --name

pika rabbitmq docker with tls-gen connection reset, no logs

此生再无相见时 提交于 2020-12-14 23:56:00
问题 I've configured a docker w rabbitmq, copied the certs from tls-gen there, stop/started and I can only get the connection established and a server reset right after sending a TLS Client Hello. No useful message from ssl. Logs all empty. Troubleshoot TLS guide didn't help. Thanks for any help. docker run -d -it --hostname=[REDACTED] -e RABBITMQ_LOGS=/var/log/rabbitmq/ -e RABBITMQ_SASL_LOGS=/var/log/rabbitmq/ -e RABBITMQ_DEFAULT_USER=[REDACTED] -e RABBITMQ_DEFAULT_PASS=[REDACTED] --name