1、rabbitMQ 与ptyhon 进程queue 区别。进程queue 主要用户Python父子进程之间或者统一进程不同子进程。rabbit可以用户不同语言之前的相互交流,socket可以实现同样功能,但是较为复杂。

2、 rabbitMQ  消息轮训。一个生产者对多个消费者时候。会自动将消息轮训给不同消费者。

# Author : xiajinqi

import pika

connetction = pika.BlockingConnection(pika.ConnectionParameters("localhost"))

channel = connetction.channel()

channel.queue_declare(queue='hello')
# 1个生产着,三个消费者,会自动轮训,其中一个消费者宕机后,消息会自动发给其他消费者处理。
channel.basic_publish(exchange='',routing_key='hello',body='hello world!') print("消息已经发送") channel.close() # Author : xiajinqi
import pika
import time connetction = pika.BlockingConnection(pika.ConnectionParameters("localhost")) channel = connetction.channel() channel.queue_declare(queue='hello') #避免生产者后启动,没有这个队列报错。所以在此申明 def callback(ch,method,properties,body):
'''
:param ch: 管道对象内存地址
:param method: 发消息给谁的申明信息
:param properties:
:param body:
:return:
'''
print(ch,method,properties,body)
ch.basic_ack(delivery_tag=method.delivery_tag) #执行完以后告诉服务端
# time.sleep()
pass ## 申明收到调用callbak处理 no_ack 默认为false消息不会丢失,表示需要客户端回调函数处理完,主动告诉服务端已经处理完。为true断电消息会丢失
#channel.basic_consume(callback,queue='hello',no_ack='True')
channel.basic_consume(callback,queue='hello') print("开始收消息") channel.start_consuming()

3、服务端消息持久化声明

channel.queue_declare(queue='hello1',durable='True') # durable队列持久化申明
# 1个生产着,三个消费者,会自动轮训,其中一个消费者宕机后,消息会自动发给其他消费者处理。
#delivery_mode 消息持久化声明
channel.basic_publish(exchange='',routing_key='hello1',body='hello world!',properties=pika.BasicProperties(delivery_mode=))

4、消息轮训,机器性能不同时候,可能要求每个机器权重不一样。实现机制如下。prefetch_count =1 只要有消息没有处理完。自动转化给其他人

# Author : xiajinqi
import pika
import time connetction = pika.BlockingConnection(pika.ConnectionParameters("localhost")) channel = connetction.channel() channel.queue_declare(queue='hello2',durable="True") #避免生产者后启动,没有这个队列报错。所以在此申明 def callback(ch,method,properties,body):
'''
:param ch: 管道对象内存地址
:param method: 发消息给谁的申明信息
:param properties:
:param body:
:return:
'''
print(ch,method,properties,body)
ch.basic_ack(delivery_tag=method.delivery_tag) #执行完以后告诉服务端
# time.sleep(30)
pass #channel.basic_consume(callback,queue='hello',no_ack='True')
channel.basic_consume(callback,queue='hello2') channel.basic_qos(prefetch_count=1)
print("开始收消息") channel.start_consuming()

5、exchange 中的fanout模式,广播模式。服务端生成一个交换器exchange(广播台开始广播)。客户端每次随机生成一个队列(收音机)。然后绑定exchange。

广播模式中。会发给所有绑定exchange的队列。消息不会缓存。类似于广播。消息是实时的。即广播时候。用户不在消息不缓存。用户不在线。消息依旧发送

# Author : xiajinqi

import pika

connetction = pika.BlockingConnection(pika.ConnectionParameters("localhost"))

channel = connetction.channel()

#channel.queue_declare(queue='hello1',durable='True') #
channel.exchange_declare(exchange='logs',exchange_type='fanout') channel.basic_publish(exchange='logs',routing_key='',body='hello world!',properties=pika.BasicProperties(delivery_mode=)) print("消息已经发送") channel.close()
#E:\RB\rabbitmq_server-3.7.\sbin\rabbitmqctl.bat list_queues # Author : xiajinqi
import pika
import time connetction = pika.BlockingConnection(pika.ConnectionParameters("localhost")) channel = connetction.channel() #channel.queue_declare(queue='hello2',durable="True") #避免生产者后启动,没有这个队列报错。所以在此申明 channel.exchange_declare(exchange='logs',exchange_type='fanout') result = channel.queue_declare(exclusive='True') #客户端每次启动会随机生成一个队列
queue_name = result.method.queue # 获取随机生成的队列名 # exchange 绑定 queue
channel.queue_bind(exchange='logs',queue=queue_name) def callback(ch,method,properties,body):
'''
:param ch: 管道对象内存地址
:param method: 发消息给谁的申明信息
:param properties:
:param body:
:return:
'''
print(ch,method,properties,body)
ch.basic_ack(delivery_tag=method.delivery_tag) #执行完以后告诉服务端
# time.sleep()
pass ## 申明收到调用callbak处理 no_ack 默认为false消息不会丢失,表示需要客户端回调函数处理完,主动告诉服务端已经处理完。为true断电消息会丢失
#channel.basic_consume(callback,queue='hello',no_ack='True')
channel.basic_consume(callback,queue=queue_name) channel.basic_qos(prefetch_count=)
print("开始收消息") channel.start_consuming()

6、direct 模式。

# Author : xiajinqi

import pika
import sys
connetction = pika.BlockingConnection(pika.ConnectionParameters("localhost")) channel = connetction.channel() #channel.queue_declare(queue='hello1',durable='True') #
channel.exchange_declare(exchange='direct_logs',exchange_type='direct') serverity = sys.argv[] if len(sys.argv)> else 'info'
message = ''.join(sys.argv[:]) or 'hello world' channel.basic_publish(exchange='direct_logs',routing_key=serverity,body=message,properties=pika.BasicProperties(delivery_mode=)) print("消息已经发送") channel.close() # Author : xiajinqi
import pika
import time
import sys
connetction = pika.BlockingConnection(pika.ConnectionParameters("localhost")) channel = connetction.channel() #channel.queue_declare(queue='hello2',durable="True") #避免生产者后启动,没有这个队列报错。所以在此申明 channel.exchange_declare(exchange='direct_logs',exchange_type='direct') result = channel.queue_declare(exclusive='True') #客户端每次启动会随机生成一个队列 channel.exchange_declare(exchange='direct_logs',exchange_type='direct') serverity = sys.argv[:] if not serverity:
print("退出")
sys.exit() queue_name = result.method.queue # 获取随机生成的队列名 for st in serverity:
channel.queue_bind(exchange='direct_logs', queue=queue_name,routing_key=st) def callback(ch,method,properties,body):
'''
:param ch: 管道对象内存地址
:param method: 发消息给谁的申明信息
:param properties:
:param body:
:return:
'''
print(ch,method,properties,body)
ch.basic_ack(delivery_tag=method.delivery_tag) #执行完以后告诉服务端
# time.sleep()
pass ## 申明收到调用callbak处理 no_ack 默认为false消息不会丢失,表示需要客户端回调函数处理完,主动告诉服务端已经处理完。为true断电消息会丢失
#channel.basic_consume(callback,queue='hello',no_ack='True')
channel.basic_consume(callback,queue=queue_name) channel.basic_qos(prefetch_count=)
print("开始收消息") channel.start_consuming()

7、topic 模式 和 direct 可以动态匹配

# Author : xiajinqi

import pika
import sys
connetction = pika.BlockingConnection(pika.ConnectionParameters("localhost")) channel = connetction.channel() #channel.queue_declare(queue='hello1',durable='True') #
channel.exchange_declare(exchange='direct_logs',exchange_type='topic') serverity = sys.argv[] if len(sys.argv)> else 'info'
message = ''.join(sys.argv[:]) or 'hello world' channel.basic_publish(exchange='direct_logs',routing_key=serverity,body=message,properties=pika.BasicProperties(delivery_mode=)) print("消息已经发送") channel.close()

8、

  

python 消息队列-rabbitMQ 和 redis介绍使用的更多相关文章

  1. 架构设计之NodeJS操作消息队列RabbitMQ

    一. 什么是消息队列? 消息(Message)是指在应用间传送的数据.消息可以非常简单,比如只包含文本字符串,也可以更复杂,可能包含嵌入对象. 消息队列(Message Queue)是一种应用间的通信 ...

  2. python消息队列snakemq使用总结

    Python 消息队列snakemq总结 最近学习消息总线zeromq,在网上搜了python实现的消息总线模块,意外发现有个消息队列snakemq,于是拿来研究一下,感觉还是很不错的,入手简单使用也 ...

  3. 高性能消息队列 CKafka 核心原理介绍(上)

    欢迎大家前往腾讯云技术社区,获取更多腾讯海量技术实践干货哦~ 作者:闫燕飞 1.背景 Ckafka是基础架构部开发的高性能.高可用消息中间件,其主要用于消息传输.网站活动追踪.运营监控.日志聚合.流式 ...

  4. Python消息队列工具 Python-rq 中文教程

    原创文章,作者:Damon付,如若转载,请注明出处:<Python消息队列工具 Python-rq 中文教程>http://www.tiangr.com/python-xiao-xi-du ...

  5. 消息队列--RabbitMQ(一)

    1.消息队列概述 可以理解为保存消息的一个媒介/或者是个容器,与之相关有两个概念(即生产者(Publish)与消费者(Consumer)).所谓生产者,就是生产创造消息的一方,那么,消费者便是从队列中 ...

  6. (二)RabbitMQ消息队列-RabbitMQ消息队列架构与基本概念

    原文:(二)RabbitMQ消息队列-RabbitMQ消息队列架构与基本概念 没错我还是没有讲怎么安装和写一个HelloWord,不过快了,这一章我们先了解下RabbitMQ的基本概念. Rabbit ...

  7. ASP.NET Core消息队列RabbitMQ基础入门实战演练

    一.课程介绍 人生苦短,我用.NET Core!消息队列RabbitMQ大家相比都不陌生,本次分享课程阿笨将给大家分享一下在一般项目中99%都会用到的消息队列MQ的一个实战业务运用场景.本次分享课程不 ...

  8. 消息队列rabbitmq/kafka

    12.1 rabbitMQ 1. 你了解的消息队列 rabbitmq是一个消息代理,它接收和转发消息,可以理解为是生活的邮局.你可以将邮件放在邮箱里,你可以确定有邮递员会发送邮件给收件人.概括:rab ...

  9. 消息队列rabbitmq rabbitMQ安装

    消息队列rabbitmq   12.1 rabbitMQ 1. 你了解的消息队列 生活里的消息队列,如同邮局的邮箱, 如果没邮箱的话, 邮件必须找到邮件那个人,递给他,才玩完成,那这个任务会处理的很麻 ...

随机推荐

  1. Python实例---简单的选课系统

    要求 思路: 构造方法传递过去学校名称,同时利用UUID创建一个随机字符串,用这个字符串来作为要写入的文件名 利用类的__str__方法来实现类对象接口返回学校名称的操作 利用pickle的dumps ...

  2. Java学习---Collection的学习

    Collection基本方法的使用 package com.huawei.ftl; import java.io.File; import java.io.FileInputStream; impor ...

  3. winform中webBrowser模拟网页操作中遇到的问题

    我们通过网页上传一些特殊数据的时候,由于必填项众多,数量量大的时候,会发现工作相当繁琐,前段时间做了一个winform内嵌webBrowser模拟网页上传文档的小工具,发现了许多问题,总结一下: 先说 ...

  4. c++计算器后续(1)

    自娱自乐: 大概是一直在说的代码规范,大概是玩一玩,以上. 代码规范: 参考原文:链接 相关节选: 4 程序的版式 4.4规则:较长的语句(>80字符)要分成多行书写. 4.5规则:不允许把多个 ...

  5. python将字符串转变成dict格式

    字符串的内容是字典,需将字符串转变成字典格式 s1 = '{"lid":2,"date":"20190211","type&quo ...

  6. Windows环境下JDK的配置及多版本JDK切换的方法记录

    (这里记录了笔者了解的关于JDK环境配置的信息,以及针对系统上存在不同版本JDK时所尝试的解决方案.具体来说,是已安装 JDK 8 后,又安装了 JDK 9 时所遇到的问题和尝试的解决方法.这次记录以 ...

  7. $_cookie的使用

    设置并发送 cookie: <?php $value = "my cookie value"; // 发送一个简单的 cookie setcookie("TestC ...

  8. LayIM.AspNetCore Middleware 开发日记(三)基础框架搭建

    前言 在上一篇中简单讲了一些基础知识,例如Asp.Net Core Middleware 的使用,DI的简单使用以及嵌入式资源的使用方法等.本篇就是结合基础知识来构建一个基础框架出来. 那么框架有什么 ...

  9. UnicodeEncodeError: 'ascii' codec can't encode characters in position 16-22: ordinal not in range(128)

    在python2.7下,将字符串写入到文件时会出现"UnicodeEncodeError: 'ascii' codec can't encode character u'\xa0' in p ...

  10. 图文助你打开MS SQL Serever的ldf和mdf文件

    第一步:在C盘下找到”program files”双击打开 第二步:打开Microsoft SQL Server 第三步:选择MSSQL.1打开DATA文件 第四步:将你的ldf文件和mdf文件复制到 ...