RabbitMQ消息持久化:就是将队列中的消息永久的存放在队列中。
 
处理方案:
# 在实例化时加入durable=True来确认消息的实例化,客户端服务端都要写
  1. channel.queue_declare(queue='hello1',durable=True)
注:只持久化了队列,并没有持久化消息。
 
# 消息持久话,在channel.basic_publish加入参数
  1. properties = pika.BasicProperties(delivery_mode = 2,)
注:pika.BasicProperties下可以自定以参数,delivery_mode = 2是默认的。
 
 
send端 发送消息后重启rabbitmq服务
  1. #!/usr/bin/env python
  2. import pika
  3.  
  4. # 通过实例创建socket
  5. connection = pika.BlockingConnection(
  6. pika.ConnectionParameters('localhost')
  7. )
  8.  
  9. # 声明一个管道/在管道内发消息
  10. channel = connection.channel()
  11.  
  12. # 管道内,声明一个队列,queue=queue的名字
  13. # durable=True持久话队列
  14. channel.queue_declare(queue='hello10',durable=True)
  15.  
  16. # routing_key = queue的名字
  17. # body = 消息内容
  18. # properties = pika.BasicProperties 持久话参数,可在()加入定义参数
  19. # delivery_mode =2 持久化消息
  20. # 一个消息不能直接发送到队列,它总是需要经过一个exchange。
  21. channel.basic_publish(exchange='',
  22. routing_key='hello10',
  23. body='Hello World!',
  24. properties = pika.BasicProperties(
  25. delivery_mode = 2,)
  26. )
  27. print(" [x] Sent 'Hello World!'")
  28.  
  29. # 关闭队列
  30. connection.close()
recv端
  1. #_*_coding:utf-8_*_
  2. __author__ = 'Alex Li'
  3. import pika,time
  4.  
  5. # 实例话创建socket
  6. connection = pika.BlockingConnection(
  7. pika.ConnectionParameters('localhost'))
  8.  
  9. # 声明一个管道/在管道内发消息
  10. channel = connection.channel()
  11.  
  12. # 为什么再次声明queue名字:如果消费者先运行了,没有声明queue就会报错
  13. # 如果想要防止报错发生,就要定义queue。
  14. #
  15. # 管道内,声明一个队列,queue=queue的名字
  16. # durable=True持久话队列
  17. channel.queue_declare(queue='hello10',durable=True)
  18.  
  19. #回调函数
  20. # ch 管道内存对象地址
  21. # method 消息发给哪个queue
  22. # body = 消息内容
  23. def callback(ch, method, properties, body):
  24. print(" [x] Received %r" % body)
  25. #time.sleep(10)
  26. # 消息处理完后会向生产端发送确认指令
  27. ch.basic_ack(delivery_tag=method.delivery_tag)
  28.  
  29. # 消费消息
  30. # callback 如果收到消息,就调用callback函数来处理消息
  31. # queue 管道内的队列名字
  32. # no_ack = True 这条消息出没处理完都不会给服务端发确认
  33. channel.basic_consume(
  34. callback,
  35. queue='hello10',)
  36.  
  37. print(' [*] Waiting for messages. To exit press CTRL+C')
  38.  
  39. # 启动后一直运行,没有数据会等待..
  40. channel.start_consuming()

Python RabbitMQ消息持久化的更多相关文章

  1. rabbitmq 消息持久化

    rabbitmq 消息持久化 2016-02-18 11:19 224人阅读 评论(0) 收藏 举报  分类: 综合(15)  版权声明:本文为博主原创文章,未经博主允许不得转载. 二: 任务分发 & ...

  2. Python RabbitMQ消息队列

    python内的队列queue 线程 queue:不同线程交互,不能夸进程 进程 queue:只能用于父进程与子进程,或者同一父进程下的多个子进程,进行交互 注:不同的两个独立进程是不能交互的.   ...

  3. Python RabbitMQ 消息队列

    RabbitMQ是一个在AMQP基础上完整的,可复用的企业消息系统.他遵循Mozilla Public License开源协议. MQ全称为Message Queue, 消息队列(MQ)是一种应用程序 ...

  4. rabbitmq 消息持久化之receive and send

    二: 任务分发 &消息持久化   启用多个接收端的时候如果某一个receive 关闭要保证消息有反馈是否收到   send端 #-*- coding: UTF-8 -*-import pika ...

  5. Rabbitmq消息持久化

    1.交换机持久化设置 exchange 持久化,在声明时指定 durable未true 2.队列持久化设置 queue 持久化,在声明时指定 durable 为true 3.消息持久化设置 Deliv ...

  6. Python RabbitMQ消息分发轮询

    1.收消息:一对多,默认依次轮询的发给每个消费端. 2.消息确认:默认RabbitMQ不会设置no_ack=Ture,意思是,当生产者给消费者发送发送消息时,消费者处理这个消息,处理完后会手动确认发送 ...

  7. RabbitMQ原理与相关操作(三)消息持久化

    现在聊一下RabbitMQ消息持久化: 问题及方案描述 1.当有多个消费者同时收取消息,且每个消费者在接收消息的同时,还要处理其它的事情,且会消耗很长的时间.在此过程中可能会出现一些意外,比如消息接收 ...

  8. Python操作rabbitmq消息队列持久化

    消息队列持久化 Python操作rabbit消息队列的持久化,如下: # 创建一个名为balance的队列,对queue进行durable持久化设为True(持久化第一步)channel.queue_ ...

  9. 【python】-- RabbitMQ 队列消息持久化、消息公平分发

    RabbitMQ 队列消息持久化 假如消息队列test里面还有消息等待消费者(consumers)去接收,但是这个时候服务器端宕机了,这个时候消息是否还在? 1.队列消息非持久化 服务端(produc ...

随机推荐

  1. [WCF] Restful 自定义宿主

    IPersonRetriever: /* * 由SharpDevelop创建. * 用户: Administrator * 日期: 2017/6/2 * 时间: 22:13 * * 要改变这种模板请点 ...

  2. Gym 101972

    F读错题wa了三个小时.自闭了,不然I题有可能能出的..已经想到组合数也敲完组合数板子了. A:这...**题吧,第一眼看的这个就秒了 #include<bits/stdc++.h> #d ...

  3. 算法提高 新建Microsoft Word文档

      算法提高 新建Microsoft Word文档   时间限制:1.0s   内存限制:256.0MB      问题描述 L正在出题,新建了一个word文档,想不好取什么名字,身旁一人惊问:“你出 ...

  4. Nestjs 序列化(Serialization)

    文档 在发送实际响应之前,Serializers为数据操作提供了干净的抽象层.例如,应始终从最终响应中排除敏感数据(如用户密码) λ yarn add class-transformer cats.e ...

  5. 接口自动化测试 (三)request.post

    上一节介绍了  requests.get()  方法的基本使用,本节介绍  requests.post()  方法的使用: 本文目录: 一.方法定义 二.post方法简单使用 1.带数据的post 2 ...

  6. 线程安全 Thread Safety Problem scala concurrency 并发

    小结: 1.基于java并发模型 Scala concurrency is built on top of the Java concurrency model. 2. 将每个请求放入一个新的线程 T ...

  7. what's the 跳空

    出自 MBA智库百科(https://wiki.mbalib.com/) 什么是跳空 跳空在日语中叫“窗口”,英语是“gap”,又称为即价格跳空,是指汇率在快速波动时产生的曲线的最低价与曲线的最高价之 ...

  8. python日期加减法操作

    对日期的一些操作: 对日期的一些操作: 1 #日期转化为字符串并得到指定(或系统日期)n天后的日期--@Eillot 2 def dataTimeToString(dsNow=ReservationT ...

  9. 【UML】NO.47.EBook.5.UML.1.007-【UML 大战需求分析】- 部署图(Deployment Diagram)

    1.0.0 Summary Tittle:[UML]NO.47.EBook.1.UML.1.007-[UML 大战需求分析]- 部署图(Deployment Diagram) Style:Design ...

  10. Ch02 控制结构和函数 - 练习

    1. 一个数字如果为正数,则它的signum为1:如果是负数,则signum为-1:如果是0,则signum为0.编写一个函数来计算这个值. scala> def signum(x:Int):I ...