RabbitMQie消息列队整理
使用方法过程,这儿只做了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消息列队整理的更多相关文章
- 在PHP中如何使用消息列队
/** * 消息列队服务 * @author zhou.tingze * @example * -----------------------------------Create----------- ...
- PHP用ActiveMq 实现消息列队
1.各种安装 2.简单配置: jetty.xml localhost:8161 配置: activemq添加stomp的61613接口 conf/activemq.xml <transportC ...
- 消息列队 php 基于redis 实现
说明 消息列队 基于PHP 实现. 之前 用python 的 flower 实现了 列队. 今天这里我们用的是 PHP 来实现: 在实际的业务环境中 PHP 用的多些: PHP 实现列队 最重要的是用 ...
- 消息列队 分布式事务解办法 celery flower使用总结
前言 项目中有场景 需要用到 分布式事务业务,经过查下资料把学习相关笔记做记录方便他人或者自己后面查看. 场景 在网站A业务中有个操作 是 要在网站B中新建一台服务器跑业务.A中执行B中的接口创建服务 ...
- C#操作消息列队
首先安装消息队列MSMQ,在“计算机管理-服务和应用程序-消息队列-专用队列”中新建列队名称Demo: static void SendAndReceiveMsg() { MessageQueue m ...
- WM_SYSCOMMAND消息命令整理 good
注意:1. 使用WM_SYSCOMMAND时,鼠标的一些消息可能会受到影响,比如不能响应MouseUp事件,可以在窗口中捕获WM_SYSCOMMAND消息,并判断消息的CommandType来判断消息 ...
- 分布式消息列队RocketMQ部署
模式: 多Master多Slave模式,异步复制: 每个 Master 配置一个 Slave,有多对Master-Slave,HA 采用异步复制方式,主备有短暂消息延迟,毫秒级. 优点:即使磁盘损坏, ...
- rabbitmq五种消息模型整理
目录 0. 配置项目 1. 基本消息模型 1.1 生产者发送消息 1.2 消费者获取消息(自动ACK) 1.3 消息确认机制(ACK) 1.4 消费者获取消息(手动ACK) 1.5 自动ACK存在的问 ...
- redis做消息列队
#encoding:utf8 import time import redis conn = redis.Redis('localhost',db=1) #连接诶数据库并使用数据库1 def inse ...
随机推荐
- java常见面试题目
(面的初级到中级之间的,却有很多高级的问题) 总结一些常见的遇见的面试题(来自各方面收集) 1.开发中Java用了比较多的数据结构有哪些? 2.谈谈你对HashMap的理解,底层原理的基本实现,Has ...
- Axure RP 9 安装
安装好的样子 官方安装包下载地址(速度较慢) 下载Axure RP 9 MAC版:https://axure.cachefly.net/AxureRP-Setup.dmg 下载Axure RP 9 P ...
- 脚本小子学习--vulnhub靶机DC8
@ 目录 前言 一.环境搭建 二.目标和思路 三.实际操作 1.信息收集 2.getshell 总结 前言 通过一些靶机实战练习,学习使用现有的工具来成为脚本小子. 一.环境搭建 靶机:Linux虚拟 ...
- STM32—位带操作
STM32中的位带操作: 名字为位带操作,实际上是对位的操作,位操作就是可以单独的对一个比特位读和写,这个在 51 单片机中非常常见. 51 单片机中通过关键字 sbit 来实现位定义, STM32 ...
- uniapp 实现信息推送(App)
废话不多说直接上代码 以下代码需写在onlaunch生命周期内 onlaunch(){// onlaunch应用级生命周期 :当uni-app 初始化完成时触发(全局只触发一次) //#ifdef A ...
- 题解 Merchant
传送门 可以发现如果我们最终选择的物品集合已经确定,就很好求了 \(\sum k*t+\sum b \geqslant s\) ,二分即可 但现在我们无法确定该选哪些物品 因此我们只需要check一下 ...
- 你知道那些JVM性能调优
设定堆内存大小 -Xms :堆初始空间大小 -Xmx : 堆内存最大限制. 设置新生代大小.新生代不宜太小,否则会有大量对象涌入老年代 -XX:NewSize : 新生代大小 -XX:NewRatio ...
- Java使用Lettuce操作redis
maven包 # 包含了lettuce jar <dependency> <groupId>org.springframework.boot</groupId> & ...
- 第12篇-认识CodeletMark
InterpreterCodelet依赖CodeletMark完成自动创建和初始化.CodeletMark继承自ResourceMark,允许自动析构,执行的主要操作就是,会按照Interpreter ...
- C#硬件访问(摄像头、麦克风)
#需要引用:AForge类库.Microsoft.DirectX using System;using System.Windows.Forms;namespace CameraTest{ publi ...