使用方法过程,这儿只做了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. Linux 开机关机在线求助与指令输入

    由于那本书版本稍稍有点早,我就跳过学习第二章第三章了(分别是主机规划和虚拟机安装)下图为在自己电脑上安装好的redhat7 4.1 我们来登入 其中第一行是Linux发行商和发行版本(欸,我的这个怎么 ...

  2. Shell-04-流程控制

    if语句 1 单分支 2 双分支 示例 3 多分支 for语句 语法 for 变量名 in 取值表; do 语句 done 1 {...} 2 $@ 将位置参数当作独立的字符串来处理 3 $* 所有的 ...

  3. Charles 抓包 Client SSL handshake failed - Remote host closed connection during handshake

    Charles 抓包 https 报错: Client SSL handshake failed - Remote host closed connection during handshake # ...

  4. Asp.NetCore 中Aop的应用

    前言 其实好多项目中,做一些数据拦截.数据缓存都有Aop的概念,只是实现方式不一样:之前大家可能都会利用过滤器来实现Aop的功能,如果是Asp.NetCore的话,也可能会使用中间件: 而这种实现方式 ...

  5. DOS创建/删除/描述 windows服务

    1.以管理员运行cmd ,输入 sc create test binPath= 程序路径\xxx.exe,主要 "="后面必须要空格 在服务里面查看结果 2.设置服务格式: sc ...

  6. C# 调用C++结构体

    参考网址:C#调用C/C++动态库,封装各种复杂结构体._liguo9860的专栏-CSDN博客 现在公司要做一个使用C#程序调用C++的一个DLL库,解析文件的功能.所以在网上找了一些资料.     ...

  7. C++ 中的User a, User b=a 和User a, User b, b=a的区别

    #include <iostream>using namespace std;class User{ public: int age; int number; User() { cout ...

  8. C# AppDomain 详解

    AppDomain 详解 AppDomain是CLR的运行单元,它可以加载Assembly.创建对象以及执行程序. AppDomain是CLR实现代码隔离的基本机制.每一个AppDomain可以单独运 ...

  9. 【SOE】 ArcGIS Server对象扩展(SOE)开发注意事项

    ArcGIS  Server对象扩展(SOE)开发注意事项 1.SOE介绍 在ArcGIS 10.1中ArcGIS Server不在支持DCOM方式的连接,这也就意味着我们不能通过本地方式的连接使用A ...

  10. blog.mzywucai.club停站

    考研,不经营了,两台服务器也关了:blog.mzywucai.club也关了,就让它沉了吧!以后做个更好的?