使用方法过程,这儿只做了windows平台教程

先安装Erlang 编程软件,然后设置环境变量,在安装RabbimMQ  ,这儿我下载了一个版本不行,后来换了最新版就好了,以后在使用过程 中如果有问题 ,可以换版本试一下,这是个坑。。然后 pip install pipk

在编程器中粘上下代码测试  先是服务端:

import pika

#连接队列服务器
connection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost'))
channel = connection.channel() #创建队列。有就不管,没有就自动创建
channel.queue_declare(queue='hello') #使用默认的交换机发送消息。exchange为空就使用默认的
channel.basic_publish(exchange='',
routing_key='hello',
body='Hello 201!')
print(" [x] Sent 'Hello World!'")
connection.close()

在另一个文件粘上客服端:

import pika
import time # 连接服务器
connection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost'))
channel = connection.channel() # rabbitmq消费端仍然使用此方法创建队列。这样做的意思是:若是没有就创建。和发送端道理道理。目的是为了保证队列一定会有
channel.queue_declare(queue='hello') # 收到消息后的回调
def callback(ch, method, properties, body):
print("我收到了,正在等。。")
time.sleep(10)
print(" [x] Received %r" % body) channel.basic_consume(callback,
queue='hello',
#no_ack=True
) print(' [*] Waiting for messages. To exit press CTRL+C')
channel.start_consuming()
------------------------------------------------------------------------------
以下是注释:
channel.basic_consume(callback,
queue='hello',
#no_ack=True 如果取消注释就会不等反应,如果客
#服端开闭,没有外理的消息会丢失
)
在安装rabbitmq文件夹下有个叫rebbitmqctl的命令可以管里查看消息队列

消息持久化,持久化客户端,就是客户端关机数据没有处理,就会丢失,默认有机制解决这个问题,客户端关机,函数没有处理完会
发给另一个客户端,不想发给另一台,数据不重要直接写上:
channel.basic_consume(callback,
queue='hello',
no_ack=True,
#默认上面红色这句
)

如果是防止服务端死机:
需要在二个地方修改,

channel.queue_declare(queue='hello'#durable = True,客户端和服务端在申明队列时都要写上,表示这个列队持 久
。。但是要消失都持久,还要在服各务端上:
hannel.basic_publish(exchange='',
routing_key='hello',
body="wwwwwwwwwww",
properties=pika.BasicProperties(
delivery_mode= 2
)
)

)
如果客户端处理不过来,,就先不要发消息过的解决方法,只需要在客户端的发送消息前加入:
channel.basic_qos(prefetch_count=1)
代码片断如下:
 收到消息后的回调
def callback(ch, method, properties, body):
print("我收到了,正在等。。")
time.sleep(10)
print(" [x] Received %r" % body)
#ch.basic_ack(delivery_tag=method.delivery_tag)#这句在我的版本内没有实际用

channel.basic_qos(prefetch_count=1)
channel.basic_consume(callback,
queue='hello',
no_ack=True,
)
广播效果要用到到exchange,可以设规测,转发器:
  有三个参数:
fanout 所有
direct 指定
topic规则
发送方,
channel.exchange_declare(exchange='direct_logs',
type='direct') #py3中type是关健字,需要加成, exchange_type=
  然后发送那儿:
channel.basic_publish(exchange='direct_logs',
routing_key="" #为空
body=message)
服务端完成代码:
import pika
import sys connection = pika.BlockingConnection(pika.ConnectionParameters(
host='localhost'))
channel = connection.channel() channel.exchange_declare(exchange='direct_logs',
type='direct') severity = sys.argv[1] if len(sys.argv) > 1 else 'info'
message = ' '.join(sys.argv[2:]) or 'Hello World!'
channel.basic_publish(exchange='direct_logs',
routing_key=severity,
body=message)
print(" [x] Sent %r:%r" % (severity, message))
connection.close()


消费方要改的多一点:第一个地方
channel.exchange_declare(exchange='direct_logs',
type='direct') #py3中type是关健字,需要加成, exchange_type=
第二个地方
在下面加上:
result = channel.queue_declare(exclusive = True)
queur_name = result.method.queue
channel.queue_bind(exchange = 'loags'
queue = queue_name

)
完成代码:
import pika
import sys connection = pika.BlockingConnection(pika.ConnectionParameters(
host='localhost'))
channel = connection.channel() channel.exchange_declare(exchange='direct_logs',
type='direct') result = channel.queue_declare(exclusive=True)
queue_name = result.method.queue severities = sys.argv[1:]
if not severities:
sys.stderr.write("Usage: %s [info] [warning] [error]\n" % sys.argv[0])
sys.exit(1) for severity in severities:
channel.queue_bind(exchange='direct_logs',
queue=queue_name,
routing_key=severity) print(' [*] Waiting for logs. To exit press CTRL+C') def callback(ch, method, properties, body):
print(" [x] %r:%r" % (method.routing_key, body)) channel.basic_consume(callback,
queue=queue_name,
no_ack=True) channel.start_consuming()

首先我写博客其实就是学习笔记,写到这儿赖了,,多对多,双向通信有空在补上。。。。。。待续











RabbitMQie消息列队整理的更多相关文章

  1. 在PHP中如何使用消息列队

    /** * 消息列队服务 * @author zhou.tingze * @example * -----------------------------------Create----------- ...

  2. PHP用ActiveMq 实现消息列队

    1.各种安装 2.简单配置: jetty.xml localhost:8161 配置: activemq添加stomp的61613接口 conf/activemq.xml <transportC ...

  3. 消息列队 php 基于redis 实现

    说明 消息列队 基于PHP 实现. 之前 用python 的 flower 实现了 列队. 今天这里我们用的是 PHP 来实现: 在实际的业务环境中 PHP 用的多些: PHP 实现列队 最重要的是用 ...

  4. 消息列队 分布式事务解办法 celery flower使用总结

    前言 项目中有场景 需要用到 分布式事务业务,经过查下资料把学习相关笔记做记录方便他人或者自己后面查看. 场景 在网站A业务中有个操作 是 要在网站B中新建一台服务器跑业务.A中执行B中的接口创建服务 ...

  5. C#操作消息列队

    首先安装消息队列MSMQ,在“计算机管理-服务和应用程序-消息队列-专用队列”中新建列队名称Demo: static void SendAndReceiveMsg() { MessageQueue m ...

  6. WM_SYSCOMMAND消息命令整理 good

    注意:1. 使用WM_SYSCOMMAND时,鼠标的一些消息可能会受到影响,比如不能响应MouseUp事件,可以在窗口中捕获WM_SYSCOMMAND消息,并判断消息的CommandType来判断消息 ...

  7. 分布式消息列队RocketMQ部署

    模式: 多Master多Slave模式,异步复制: 每个 Master 配置一个 Slave,有多对Master-Slave,HA 采用异步复制方式,主备有短暂消息延迟,毫秒级. 优点:即使磁盘损坏, ...

  8. rabbitmq五种消息模型整理

    目录 0. 配置项目 1. 基本消息模型 1.1 生产者发送消息 1.2 消费者获取消息(自动ACK) 1.3 消息确认机制(ACK) 1.4 消费者获取消息(手动ACK) 1.5 自动ACK存在的问 ...

  9. redis做消息列队

    #encoding:utf8 import time import redis conn = redis.Redis('localhost',db=1) #连接诶数据库并使用数据库1 def inse ...

随机推荐

  1. springboot整合javafx

    原文(原码)参考地址: https://github.com/roskenet/springboot-javafx-support https://github.com/spartajet/javaf ...

  2. Linux进程间通信方式--信号,管道,消息队列,信号量,共享内存

    1.概述 通信方法 无法介于内核态与用户态的原因 管道(不包括命名管道) 局限于父子进程间的通信. 消息队列 在硬.软中断中无法无阻塞地接收数据. 信号量 无法介于内核态和用户态使用. 内存共享 需要 ...

  3. spring-session-data-redis反序列化问题

    springCloud项目,采用springSession,用户模块同时引入了spring-cloud-starter-security,在其他模块request.getSession()的时候抛了以 ...

  4. SpringCloud-技术专区-从源码层面让你认识Feign工作流程和运作机制

    Feign工作流程源码解析 什么是feign:一款基于注解和动态代理的声明式restful http客户端. 原理 Feign发送请求实现原理 微服务启动类上标记@EnableFeignClients ...

  5. iOS-block循环引用详解和应用

    Block循环引用 什么情况下block会造成循环引用 ARC 情况下 block为了保证代码块内部对象不被提前释放,会对block中的对象进行强引用,就相当于持有了其中的对象,而如果此时block中 ...

  6. cobaltstrike 框架简述

    关于cobalt strike,火起来也有好几年了,首先感谢大佬们慷慨相助愿意在网上分享和翻译相关资料,让这么好的渗透测试框架工具被更多人知道 那就来整理一下在使用这个框架的过程中我认为需要了解的小知 ...

  7. 如何保证前端项目上线后的安全?webfunny已总结前端最关键的12大指标

    实时监控大屏   众所周知:实时流量大屏,是用来监控前端项目上线质量的. 如大家所知,监控系统会监控线上应用的各项指标,如:错误.白屏.耗时等等,但是仔细一想,即使有这些监控,我们也不一定能够保证线上 ...

  8. 什么是.NET CLI CLR IL JIT GC,它们是如何工作的

    参考网址: https://cloud.tencent.com/developer/article/1432891 1:什么是.NET? NET 是 Microsoft 的用以创建 XML Web 服 ...

  9. C++基于ATL工程编写ActiveX控件步骤

    参考网址: https://blog.csdn.net/whui19890911/article/details/8896554 开发环境:VS2010 开发工程:C++ATL项目 开发目的:创建Ac ...

  10. Hibernate之抓取策略

    时间:2017-1-23 19:08 --区分延迟和立即检索1.立即检索    当执行某行代码时,会马上发出SQL语句进行查询.    例如:get()2.延迟检索    当执行某行代码时,不会马上发 ...