消息服务器rabbmit

RabbitMQ 消息队列

python里有两个Q, threading queue、不同线程间数据交互

进程Queue: 不同进程间交互这个说法是错误的。 这个是用于父进程与子进程间交互、或者同属于同一父进程下多个子进程进行交互。

两个python程序的进程间是无法通信的。

各个独立进程间通信:

QQ 要发送消息给 world。1、通过socket,这个需要自己去写很多东西(沾包、收到的是什么需要返回的又是什么……) 。2、消息队列,

那两个不同的程序要通信、两台机器要通信?

消息队列: 可以跟各种进程通信、且不用再去写什么沾包啊之类的

zeromq\activemq 这些都是消息队列

很多事件需要自己去体验一下。

Rabbitmq:  erlang开发的

发消息:轮询

消息发出去了、需要确认吗? 还是发出去就完了,管你的。

大部份情况都需要回发一下处理完的消息。。万一处理过程中、挂了怎么办?发送端没收到回复是吧

挂了,socket断了,发送端自然知道、这消息立马就重新发给另一个在线的接收端。

no_ack=False# 需要收到了回应才放弃这条消息

回应保证的是:客户端、接收消息端挂掉   channel.basic_ack()

持久化: 保证的是,服务器挂掉之后

Rabbitmq安装:

需要安装好环境:erlang

brew install rabbitmq

看例子:

import time
import pika
import uuid class MyRabbmit(object):
def __init__(self):
self.connection = pika.BlockingConnection(pika.ConnectionParameters(
"localhost"
))
self.channel = self.connection.channel()
# self.channel.queue_declare(queue="rpc_queue")
result = self.channel.queue_declare(exclusive=True)
self.callback_queue = result.method.queue self.channel.basic_consume(self.on_response,
queue=self.callback_queue,
# no_ack=True
) def on_response(self, ch, method, property, body):
print(property.reply_to)
print(body) self.response = body.decode() def call(self, cmd):
self.response = None
self.uuid = str(uuid.uuid4())
print(self.uuid)
self.channel.basic_publish(exchange="",
routing_key="rpc_queue",
body = cmd,
properties = pika.BasicProperties(
reply_to=self.callback_queue,
correlation_id=self.uuid
)
)
while self.response is None:
time.sleep(0.5)
self.connection.process_data_events()
# print("wait...")
return self.response my_rpc = MyRabbmit()
cmd = input(">>").strip()
if cmd:
result = my_rpc.call(cmd) print("result: ", result)
import os
import pika connection = pika.BlockingConnection(pika.ConnectionParameters(
"localhost"
)) channel = connection.channel()
channel.queue_declare("rpc_queue") def func(cmd):
result = os.popen(cmd).read()
print(result)
return result def on_response(ch, method, property, body):
print(body)
print(property.reply_to, property.correlation_id)
body = func(body.decode())
channel.basic_publish(exchange="",
routing_key=property.reply_to,
body=body
)
ch.basic_ack(delivery_tag=method.delivery_tag) # 回复一下结果 channel.basic_consume(on_response,
queue="rpc_queue",
no_ack=False,
) print("等待收消息...")
channel.start_consuming()

Python 第五阶段 学习记录之----rabbmit的更多相关文章

  1. Python 第五阶段 学习记录之---Django 进阶

    Model 一.创建表 1.基本结构 字段 AutoField(Field) - int自增列,必须填入参数 primary_key=True BigAutoField(AutoField) - bi ...

  2. Python 第五阶段 学习记录之---Django 基础

    Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM.模型绑定.模板引擎.缓存.Session等诸多功能. ...

  3. Python 第五阶段 学习记录之--- Web框架

    什么是web服务器的原理是什么 Web框架本质 众所周知,对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. #!/usr/bin/env pyt ...

  4. Python 第五阶段 学习记录之----ORM

    ORM: orm英文全称object relational mapping,就是对象映射关系程序,简单来说我们类似python这种面向对象的程序来说一切皆对象,但是我们使用的数据库却都是关系型的,为了 ...

  5. Python 第八阶段 学习记录之---算法

    算法(Algorithm): 一个计算过程, 解决问题的方法 1.递归的两个特点 - 调用自身 - 结束条件 时间复杂度 - 时间复杂度是用来估计算法运行时间的一个式子(单位) - 一般来说,时间复杂 ...

  6. python 第四阶段 学习记录之----异步

    异步: 知识情况: 1.多线程, 多线程使用场景 1.IO操作不占CPU,读写数据(网络中.系统中) 2.计算占CPU, 3.上下文切换不占CPU.它消耗资源 python多线程 不适合CPU密集型的 ...

  7. Python 第四阶段 学习记录之----多线程

    多线程 多线程例子, 注释部份即为多线程的使用 #-*- coding: utf-8 -*- # Wind clear raise # 2017/3/5 下午2:34 import socket im ...

  8. python+selenium 自动化测试框架-学习记录

     本人小白一枚,想着把学习时的东西以博客的方式记录下来,文章中有不正确的地方请大佬多多指点!!共同学习 前期准备 安装python3.selenium.下载对应版本的webdriver:安装所需的第三 ...

  9. python pep8编码风格学习记录(转)

    简要归纳 每个缩进层级使用4个空格. 每行最多79个字符. 顶层的函数或类的定义之间空两行. 采用ASCII或UTF-8编码文件 在文件顶端,注释和文档说明之下,每行每条import语句只导入一个模块 ...

随机推荐

  1. 如何让linux的history命令显示时间记录

    在.bashrc文件追加如下内容即可: HISTFILESIZE= HISTSIZE= HISTTIMEFORMAT='%F %T ' export HISTTIMEFORMAT

  2. Java Spring MVC 错误 及 常见问题 总结

    [参考]spring入门常见的问题及解决办法 错误: 从Git新获取项目 运行出现 1.org.springframework.beans.factory.BeanDefinitionStoreExc ...

  3. Python连接Mssql

    此篇使用的是Python3.6 下载pymssql包 打开网址http://www.lfd.uci.edu/~gohlke/pythonlibs/ 用pip安装whl文件.在cmd中输入 pip in ...

  4. 库存秒杀问题-redis解决方案- 接口限流

    <?php/** * Created by PhpStorm. * redis 销量超卖秒杀解决方案 * redis 文档:http://doc.redisfans.com/ * ab -n 1 ...

  5. 基金 、社保和QFII等机构的重仓股排名评测

    基金前15大重仓股持仓股排名 基金重仓前15大个股,相较于同期沪深300的平均收益, 近1月:2.45%, 近3月:10.0%, 近1年:11.22%, 近3年:105.23%. 1,中国平安(SH6 ...

  6. 【Py-Github】根据条件筛选Github repo的例子

    条件: language:python commits:>100 contributors:>2 stars:>5 fork:0 实现: from github import Git ...

  7. 阿里云申请免费https证书 + IIS服务器安装

    参考: 阿里云免费SSL证书申请与安装使用(IIS7)

  8. a排兵布阵

    来源hdu1166 C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务就是要监视这些工兵 ...

  9. 浏览器打开exe文件

    <win-r> regedit 打开注册表,然后自定义协议 自定义协议注册表.reg 打开后导入 Windows Registry Editor Version 5.00 [HKEY_CL ...

  10. wamp 进入到项目中找不到localhost

    重点在 www 目录的 index.php 里面,把里面没有第一句没有被注释的话: $suppress_localhost = true; 改成 $suppress_localhost = false ...