Python操作Rabbit MQ的5种模式
python版本: 2.7.14
一 消息生产者代码:
# -*- coding: utf-8 -*- import json
import pika
import urllib
import urllib2
import chardet
import sys
import json
from common import CommonMethod
import pika
import time HOST_NAME = "172.21.204.14"
USER_NAME = "xxx"
PASSWORD = "xxx" # 1."Hello World!"
def hello_world():
credentials = pika.PlainCredentials(USER_NAME, PASSWORD)
connection = pika.BlockingConnection(pika.ConnectionParameters(HOST_NAME, 5672,'/', credentials))
channel = connection.channel() channel.queue_declare(queue='hello')
channel.basic_publish(exchange='',
routing_key='hello', # specify queue name
body='Hello World!')
print(" [x] Sent 'Hello World!'")
connection.close() # 2."Work queues"
def new_task():
credentials = pika.PlainCredentials(USER_NAME, PASSWORD)
connection = pika.BlockingConnection(pika.ConnectionParameters(HOST_NAME, 5672,'/', credentials))
channel = connection.channel() channel.queue_declare(queue='task_queue', durable=True) # 设置队列持久化
message = ' '.join(sys.argv[1:]) or "Hello World!"
channel.basic_publish(exchange='',
routing_key='task_queue',
body=message,
properties=pika.BasicProperties(
delivery_mode = 2, # 设置消息持久化
))
print(" [x] Sent %r" % message)
connection.close() # 3."Publish/Subscribe"
def emit_log(message):
credentials = pika.PlainCredentials(USER_NAME, PASSWORD)
connection = pika.BlockingConnection(pika.ConnectionParameters(HOST_NAME, 5672,'/', credentials))
channel = connection.channel() channel.exchange_declare(exchange='logs', # 申明logs交换机
exchange_type='fanout') # 交换机类型: 发布/订阅 channel.basic_publish(exchange='logs',
routing_key='',
body=message)
print(" [x] Sent %r" % message)
connection.close() # 4."Routing"
def emit_log_direct(log_level,message):
credentials = pika.PlainCredentials(USER_NAME, PASSWORD)
connection = pika.BlockingConnection(pika.ConnectionParameters(HOST_NAME, 5672,'/', credentials))
channel = connection.channel() channel.exchange_declare(exchange='direct_logs', # 申明logs交换机
exchange_type='direct') # 交换机类型: 路由(Routing) channel.basic_publish(exchange='direct_logs',
routing_key=log_level,
body=message)
print(" [x] Sent %r:%r" % (log_level, message))
connection.close() emit_log_direct("info", "info log message:...")
emit_log_direct("error", "error log message:...") # 5."Topic"
# 与Routing模式类似,比Routing模式多了routing_key可以使用通配符"*","#"等,使用更加灵活
二 消息消费者代码:
# -*- coding: utf-8 -*- import json
import pika
import urllib
import urllib2
import chardet
import sys
import json
from common import CommonMethod
import pika
import time HOST_NAME = "172.21.204.14"
USER_NAME = "xxx"
PASSWORD = "xxx" # 1."Hello World!"
def hello_world():
credentials = pika.PlainCredentials(USER_NAME, PASSWORD)
connection = pika.BlockingConnection(pika.ConnectionParameters(HOST_NAME, 5672,'/', credentials))
channel = connection.channel() channel.queue_declare(queue='hello')
channel.basic_publish(exchange='',
routing_key='hello', # specify queue name
body='Hello World!')
print(" [x] Sent 'Hello World!'")
connection.close() # 2."Work queues"
def new_task():
credentials = pika.PlainCredentials(USER_NAME, PASSWORD)
connection = pika.BlockingConnection(pika.ConnectionParameters(HOST_NAME, 5672,'/', credentials))
channel = connection.channel() channel.queue_declare(queue='task_queue', durable=True) # 设置队列持久化
message = ' '.join(sys.argv[1:]) or "Hello World!"
channel.basic_publish(exchange='',
routing_key='task_queue',
body=message,
properties=pika.BasicProperties(
delivery_mode = 2, # 设置消息持久化
))
print(" [x] Sent %r" % message)
connection.close() # 3."Publish/Subscribe"
def emit_log(message):
credentials = pika.PlainCredentials(USER_NAME, PASSWORD)
connection = pika.BlockingConnection(pika.ConnectionParameters(HOST_NAME, 5672,'/', credentials))
channel = connection.channel() channel.exchange_declare(exchange='logs', # 申明logs交换机
exchange_type='fanout') # 交换机类型: 发布/订阅 channel.basic_publish(exchange='logs',
routing_key='',
body=message)
print(" [x] Sent %r" % message)
connection.close() # 4."Routing"
def emit_log_direct(log_level,message):
credentials = pika.PlainCredentials(USER_NAME, PASSWORD)
connection = pika.BlockingConnection(pika.ConnectionParameters(HOST_NAME, 5672,'/', credentials))
channel = connection.channel() channel.exchange_declare(exchange='direct_logs', # 申明logs交换机
exchange_type='direct') # 交换机类型: 路由(Routing) channel.basic_publish(exchange='direct_logs',
routing_key=log_level,
body=message)
print(" [x] Sent %r:%r" % (log_level, message))
connection.close() emit_log_direct("info", "info log message:...")
emit_log_direct("error", "error log message:...") # 5."Topic"
# 与Routing模式类似,比Routing模式多了routing_key可以使用通配符"*","#"等,使用更加灵活
三 图片

官网参考文档: http://www.rabbitmq.com/getstarted.html
Python操作Rabbit MQ的5种模式的更多相关文章
- Python操作MySQL数据库的三种方法
https://blog.csdn.net/Oscer2016/article/details/70257024 1. MySQLdb 的使用 (1) 什么是MySQLdb? MySQLdb 是用 ...
- Python操作MySQL
本篇对于Python操作MySQL主要使用两种方式: 原生模块 pymsql ORM框架 SQLAchemy pymsql pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb ...
- python成长之路【第十三篇】:Python操作MySQL之pymysql
对于Python操作MySQL主要使用两种方式: 原生模块 pymsql ORM框架 SQLAchemy pymsql pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎 ...
- Python开发【第十九篇】:Python操作MySQL
本篇对于Python操作MySQL主要使用两种方式: 原生模块 pymsql ORM框架 SQLAchemy pymsql pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb ...
- Day12(补充) Python操作MySQL
本篇对于Python操作MySQL主要使用两种方式: 原生模块 pymsql ORM框架 SQLAchemy pymsql pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb ...
- Python操作SQLAchemy
如果对代码不懂就看这个:http://www.cnblogs.com/jixuege-1/p/6272888.html 本篇对于Python操作MySQL主要使用两种方式: 原生模块 pymsql O ...
- Python开发【第十一篇】:Python操作MySQL
本篇对于Python操作MySQL主要使用两种方式: 1.原生模块pymsql. 2.ORM框架SQLAchemy. pymsql pymsql是Python中操作MySQL的模块,其使用方法和MyS ...
- Python操作rabbitmq消息队列持久化
消息队列持久化 Python操作rabbit消息队列的持久化,如下: # 创建一个名为balance的队列,对queue进行durable持久化设为True(持久化第一步)channel.queue_ ...
- Python自动化开发 - Python操作MySQL
本篇对于Python操作MySQL主要使用两种方式: 原生模块 pymsql ORM框架 SQLAchemy 一.pymysql pymsql是Python中操作MySQL的模块,其使用方法和mysq ...
随机推荐
- LVS + Keepalived 实现高可用、负载均衡 Web 集群
简介: LVS 是 Linux Virtual Server 的简写,Linux 虚拟服务器的意思,是一个虚拟的服务器集群系统,此项目由章文嵩博士于 1998 年 5 月成立,是中国最早出现的自由软件 ...
- pymongo--Bulk Write Operations
mongo支持客户端进行批量写操作,其基于单一集合. mongo数据库允许应用程序指定用于批量写操作的可接受的等级. mongo提供方法db.collection.bulkWrite()用于批量插入, ...
- js 使用jquery.form.js文件上传
1.文件上传,使用jquery.form.js插件库 <!DOCTYPE html> <html> <head> <meta charset="UT ...
- XenServer:使用XenCenter开设VPS(多图完整版)
打铁要趁热,咱们接着来玩XenServer.昨天赵容用机房提供的KVM给服务器装了XenServer,今天我们来玩更有意思的:开小鸡.装好XenServer之后,访问我们的服务器IP,就可以看到Xen ...
- keras之save & reload model
import numpy as np np.random.seed(1337) # for reproducibility from keras.models import Sequential fr ...
- centos 专题-各种配置应有尽有
你想要的在这里都能得到解决: http://www.linuxidc.com/topicnews.aspx?tid=14
- entity framework 新增,更新,事务
protected void Button1_Click(object sender, EventArgs e) { yyEntities _db; _db = new yyEntities(); t ...
- 使用IP连接SQL SERVER或者配置为连接字符串失败
使用IP连接SQL SERVER或者配置为连接字符串失败 情景一:当在webconfig文件中使用 <add key="ConnectionString" value=& ...
- linux常用命令:find 命令参数详解
find一些常用参数的一些常用实例和一些具体用法和注意事项. 1.使用name选项: 文件名选项是find命令最常用的选项,要么单独使用该选项,要么和其他选项一起使用. 可以使用某种文件名模式来匹配 ...
- jquery easyUI相关
jquery easyUI相关===================================easyUI表单验证处理//jquery easyUI 表单验证不通过让光标定位在第一个未通过验证的 ...