广播模式下的生产者与消费者fanout模式

生产者

#coding=utf-8
import pika
import sys
connection = pika.BlockingConnection(pika.ConnectionParameters(‘localhost‘))  #建立socket连接可以加各种参数,端口,用户名,等
channel = connection.channel()  #声明一个管道

channel.exchange_declare(exchange=‘logs‘,exchange_type=‘fanout‘)   #声明广播
channel.basic_publish(exchange=‘logs‘,routing_key=‘‘,
                                   body = ‘hellow,word‘,#队列的名字、消息内容

                                   )

print ‘send hellow,word‘
connection.close()

消费者

#coding=utf-8
import pika
import time
connection = pika.BlockingConnection(pika.ConnectionParameters(host = ‘localhost‘))
channel = connection.channel()
channel.exchange_declare(exchange=‘logs‘                      exchange_type=‘fanout‘) #直接加位置参数会出错,必须指定参数

result = channel.queue_declare(exclusive=True)#生成一个随机队列,用完之后删除
queue_name = result.method.queue

channel.queue_bind(exchange=‘logs‘,queue=queue_name)

def callback(ch,method,properties,body):  #回调函数
    print ‘收到消息:‘,body
    time.sleep(30)
    print ‘消息处理完毕:‘, body
channel.basic_consume(callback,queue=queue_name
                      #no_ack=True  需要客户端确认,如果正在处理消息的时候客户端挂掉就会转到下一个客户端,会等待消息完整的处理完
                      )#如果收到消息就调用callback来处理消息
print ‘等待接收消息。。。。。‘
channel.start_consuming()   #循环持续运行下去

#消息持久化

原文地址:https://www.cnblogs.com/qiangayz/p/8654751.html

时间: 2024-08-01 14:45:56

广播模式下的生产者与消费者fanout模式的相关文章

java生产者/消费者模式实现——一生产者一消费者(操作值)

胶多不粘话多不甜,直接上代码: 生产者类: /** * Created by 51304 on 2016/2/28. */ public class P { private String lock; public P(String lock){ this.lock = lock; } public void setValue(){ try{ synchronized (this.lock){ if(!ValueObject.value.equals("")){ lock.wait();

解决部分在Debug模式下程序没问题但是Release模式下出现问题的方法

编译策略介绍 关于优化级别:GCC_OPTIMIZATION_LEVEL 描述如下 None: Do not optimize.  [-O0]With this setting, the compiler's goal is to reduce the cost of compilation and to make debugging produce the expected results. Statements are independent: if you stop the program

Linux centosVMware Vim介绍、vim颜色显示和移动光标、vim一般模式下移动光标、vim一般模式下复制、剪切和粘贴

一.Vim介绍 vim 是一款功能强大的文本编辑器,是vi的升级版,带有颜色显示, 默认有三种模式:一般模式, 命令模式,  编辑模式   安装Vim [[email protected] ~]# vim /etc/passwd-bash: vim: 未找到命令[[email protected] ~]# [[email protected] ~]# yum install -y vim-enhanced ... 二.颜色显示.移动光标 [[email protected] ~]# vim /e

信号量实现环形buff下多生产者多消费者模型

posix下定义了一个semaphore,他和systemV版本下的sem很像,而这个多用于线程,它的单位是信号量,而sem的单位是信号量集.  #include <semaphore.h>  int sem_init(sem_t *sem, int pshared, unsigned int value);  int sem_destroy(sem_t *sem);  int sem_wait(sem_t *sem);  int sem_trywait(sem_t *sem);  int s

实现生产者与消费者模式

实现生产者与消费者模式 目录 生产者与消费者模式 实现 生产者与消费者模式 什么是生产者消费者模式 生产者消费者模式是通过一个容器来解决生产者和消费者的强耦合问题.生产者和消费者彼此之间不直接通讯,而通过阻塞队列来进行通讯,所以生产者生产完数据之后不用等待消费者处理,直接扔给阻塞队列,消费者不找生产者要数据,而是直接从阻塞队列里取,阻塞队列就相当于一个缓冲区,平衡了生产者和消费者的处理能力. 这个阻塞队列就是用来给生产者和消费者解耦的.纵观大多数设计模式,都会找一个第三者出来进行解耦,如工厂模式

生产者与消费者优点

在实际的软件开发过程中,经常会碰到如下场景:某个模块负责产生数据,这些数据由另一个模块来负责处理(此处的模块是广义的,可以是类.函数.线程.进程等).产生数据的模块,就形象地称为生产者:而处理数据的模块,就称为消费者. 单单抽象出生产者和消费者,还够不上是生产者/消费者模式.该模式还需要有一个缓冲区处于生产者和消费者之间,作为一个中介.生产者把数据放入缓冲区,而消费者从缓冲区取出数据. ◇解耦 假设生产者和消费者分别是两个类.如果让生产者直接调用消费者的某个方法,那么生产者对于消费者就会产生依赖

log4net在release模式下无法生成文件或不写入日志

在Debug模式一切正常,但是在release模式下log4net不工作,查了很多资料,终于解决.具体做如下检查修改. 1.检查log4net写入日志文件路径是否正确: 2.检查对应日志文件路径是否有权限: 3.检查程序log4net配置获取路径: 最常见的问题是第三步,一般都是在AssemblyInfo.cs文件中写入如下代码 [assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Config

在非归档模式下不能更改表空间为备份模式

Oracle表空间设置为备份模式后,便可以联机对表空间下数据文件进行文件系统级别的copy备份操作,因为期间对表空间的修改都记录到数据库的重做日志文件中. 由此想到数据库如果是非归档模式,那么这个表空间备份模式的时间必须不能超过联机日志被覆盖的时间,才能保证数据的修改不会丢失. 那么Oracle对这种情况是如何择决的呢? 实验表明:Oracle是干脆不让你在非归档模式下开启表空间的备份模式. 报错如下: ORA-01123: cannot start online backup; media r

解决360、猎豹浏览器等极速模式下css3兼容问题

有时候你会发现你写的animation动画的css3效果,在IE.谷歌.火狐等主流的新版本的浏览器的是没有什么兼容问题的,即便你不写前缀,也是可以显示动画效果的.然后,你本地在360浏览器或猎豹浏览器下(我只试了这两个)打开,动画效果是不出来的,一开始你会想到是前缀问题,那么我把前缀加上,好像有时可以有时不可以.360跟猎豹采用的都是谷歌跟IE的双内核,为什么会出现这个问题?是因为360浏览器分兼容模式和极速模式,极速模式下有兼容问题,兼容模式下问题较少,这就导致了极速模式下不支持css3. 解