RabbitMQ&Python


  1. RabbitMQ简介
    http://www.searchsoa.com.cn/showcontent_43337.htm

Fanout Exchange——不处理路由键。你只需要简单的将队列绑定到交换机上。一个发送到交换机的消息都会被转发到与该交换机绑定的所有队列上。很像子网广播,每台子网内的主机都获得了一份复制的消息。Fanout交换机转发消息是最快的。

Direct Exchange——处理路由键。需要将一个队列绑定到交换机上,要求该消息与一个特定的路由键完全匹配。这是一个完整的匹配。如果一个队列绑定到该交换机上要求路由键 “dog”,则只有被标记为“dog ”的消息才被转发,不会转发dog.puppy ,也不会转发dog.guard ,只会转发dog 。   

Topic Exchange——将路由键和某模式进行匹配。此时队列需要绑定要一个模式上。符号“#”匹配一个或多个词,符号“*”匹配不多不少一个词。因此“audit.#”能够匹配到“audit.irs.corporate ”,但是“audit.* ” 只会匹配到“audit.irs ”
1.1 理
讲解的很详细
http://hwcrazy.com/34195c9068c811e38a44000d601c5586/be62fc2668c811e3adba000d601c5586/
RabbitMQ提供了四种Exchange:fanout,direct,topic,header

Direct Exchange
   
任何发送到Direct Exchange的消息都会被转发到RouteKey中指定的Queue。

1.一般情况可以使用rabbitMQ自带的Exchange:”"(该Exchange的名字为空字符串,下文称其为default Exchange)。

2.这种模式下不需要将Exchange进行任何绑定(binding)操作

3.消息传递时需要一个“RouteKey”,可以简单的理解为要发送到的队列名字。

4.如果vhost中不存在RouteKey中指定的队列名,则该消息会被抛弃。

2.RabbitMQ
mac 安装
http://my.oschina.net/u/998693/blog/547873
下载 然后 host添加,然后 运行
2.1 启动 web插件
没有启动 要启动
./ rabbitmq-plugins enable rabbitmq_management

2.2 启动 ./rabbitmq-server restart
2.2.1 账户设置
一下都执行一遍
这个 并不是 admin 很有可能无法登陆

添加
/Users/Downloads/rabbitmq_server-3.5.7/sbin/rabbitmqctl add_user bayern 123456
/Users/Downloads/rabbitmq_server-3.5.7/sbin/rabbitmqctl set_admin bayern
删除
/Users/Downloads/rabbitmq_server-3.5.7/sbin/rabbitmqctl delete_user guest
权限
/Users/Downloads/rabbitmq_server-3.5.7/sbin/rabbitmqctl set_permissions -p "/" bayern "." "." ".*"

*mac 一些坑*
1.用户login failed
添加用户时要这样操作
rabbitmqctl add_user test test
rabbitmqctl set_user_tags test administrator
rabbitmqctl set_permissions -p devhost dev ".*" ".*" ".*"
http://stackoverflow.com/questions/22850546/cant-access-rabbitmq-web-management-interfac     e-after-fresh-install
注:当前用户 test 只是在 vhos‘/’ 下 

(1) 新增一个用户
  rabbitmqctl  add_user  Username  Password
(2) 删除一个用户
  rabbitmqctl  delete_user  Username
(3) 修改用户的密码
  rabbitmqctl  change_password  Username  Newpassword
(4) 查看当前用户列表
rabbitmqctl  list_users


                                RabbitMQ Demo

/Users/Downloads/rabbitmq_server-3.5.7/sbin/rabbitmqctl
add_vhost RabbitMQ.Demo.host

/Users/Downloads/rabbitmq_server-3.5.7/sbin/rabbitmqctl
set_permissions -p "RabbitMQ.Demo.host" bayern "." "." ".*"

关于login_failed的一些操作 (登陆账户设置)

http://www.cnblogs.com/mingaixin/p/4134920.html

还有**官方**更详细的介绍 
https://www.rabbitmq.com/man/rabbitmqctl.1.man.html
[此处输入链接的描述][2]

2.4 进入 http://127.0.0.1:15672/ web控制台

pip 安装 卸载等
http://www.xuebuyuan.com/593678.html

easy_install:
$ easy_install pip

rabbitmq-server 安装方法
http://blog.csdn.net/i_bruce/article/details/39555417
sudo lsof -n -P| grep :5672 查看 5672 端口

停止 已经运行的 rabbit
sudo rabbitmqctl stop

Unbutu

安装

方法一

sudo apt-get install rabbitmq-server
sudo pip install pika

http://www.01happy.com/ubuntu-rabbitmq-and-python-practice/
今天再次整理一下,有些忘记了,查看原链接就行

安装以及测试 实现简单的 收发 hello 这个相对 mac 感觉简单点啊,没mac复杂
mac 也可通过安装 pika 实现同类操作

进入web管理
参考这个
http://blog.csdn.net/i_bruce/article/details/39555417 但是
通过 rabbitmq官网安装 deb
使用 apt-get 安装 erlang
这篇文章有些安装还是比较麻烦的

有时候 plugin 一直无法激活 要在当前 rabbitmq中去关闭 sudo rabbitmqctl stop
然后再enable --->启动
3.测试
3.1
http://yidao620c.iteye.com/blog/1947338
一些发送接收
pika
3.1.1
python pika的一些一些guide 参考 github docs--examples
https://github.com/pika/pika
http://pika.readthedocs.io/en/0.10.0/examples/using_urlparameters.html
%2f是'/ '的URL编码
using_urlparameters 的连接参考
例如:
scheme://username:password@host:port/virtual_host?key=value&key=value

The default connection URL connects to the / virtual host as guest
using the guest password on localhost port 5672. Note the forwardslash
in the URL is encoded to %2F::

amqp://guest:guest@localhost:5672/%2F

Connect to a host rabbit1 as the user www-data using the password
rabbit_pwd on the virtual host web_messages::

amqp://www-data:rabbit_pwd@rabbit1/web_messages

Connecting via SSL is pretty easy too. To connect via SSL for the
previous example, simply change the scheme to amqps. If you do not
specify a port, Pika will use the default SSL port of 5671::

amqps://www-data:rabbit_pwd@rabbit1/web_messages

If you're looking to tweak other parameters, such as enabling
heartbeats, simply add the key/value pair as a query string value. The
following builds upon the SSL connection, enabling heartbeats every 30
seconds::

amqps://www-data:rabbit_pwd@rabbit1/web_messages?heartbeat=30

3.1.1.1
使用**pika登录**时 python要无论是localhost还是 远程端口都是**5672**
**默认连接**:
    本地:
    默认账号 是guest 密码 guest
    guest只能本地用
connection = pika.BlockingConnection(pika.ConnectionParameters(
'localhost'))

使用账号
例如
账号 mactest 密码 test
本地连接

connection =
pika.BlockingConnection(pika.URLParameters('amqp://mactest:test@localhost:5672/%2F'))

*远程*

connection =
pika.BlockingConnection(pika.URLParameters('amqp://mactest:test@192.168.1.134:5672/%2F'))

%2F表示是默认的vhost(“/”),如有设置vhost 需要设置为相应的参数

3.2.1
model--1

在没有建立consumer 和publisher关系时容易出现混乱
1. 建立通讯时。一个主机注册localhost:5672 receive.py
另一个远程建立 192....:5672 send py
两个可以实现通讯,
但是这时候主机如果发起一个 send.py 那么远程的 send.py就会无效。
没有建立关系,或者指定vhost的时候就会出现这样的问题。一个recevie只     能对应一个send
所以可以 其一 在用户下面为其设定 特有的vhost 
    rabbitmqctl set_permissions -p / test ".*" ".*" ".*"
    这里的 是跟host “/”

modle--2
无法连接第二个账号,log现实 vhost refused to user
添加远程访问
http://blog.haohtml.com/archives/15249
仔细看一下。vhost的名字。
vhost不要乱加. 最好从 web端添加 vhost

连接测试
很不错的
http://yidao620c.iteye.com/blog/1947338

3.2pika demo
3.2.1 consueme 就是 接受者
publish 发布者

遇到的问题

pip install ..

return
_setlocale(category, locale)

http://stackoverflow.com/questions/36394101/pip-install-locale-error-unsupported-locale-setting

queue过多
容易出问题需要重启

读取json

http://blog.chinaunix.net/uid-9525959-id-3074355.html
注意json 格式不要错

 time.sleep(location.count('.'))
 阻塞,直到location全部读完。。
 
 注意 路径问题。rabbit sshcommand 默认的 路径 是 /root
 任何文件操作的 都要加 /**/.. 文件路径
 
 
 查看队列 list
 rabbitmqctl list_queues
 
 更多用法及参数,可以执行如下命令查看
 rabbitmqctl

ffmpeg http://www.tuicool.com/articles/Ivyie2e


python nohub

nohup python -u test.py > out.log &

本来想测试下nohup的用法,去执行一个python脚本:nohup python test.py > out.log &

结果郁闷啊,怎么都查看不到输出!
python的输出又缓冲,导致out.log并不能够马上看到输出。

-u参数,使得python不启用缓冲。

nohup python -u rabbit_compress.py > rabbit.log &

disconnect 的问题

因为用mq做自动化,执行一个耗时任务,执行完毕才 接受下一个,开始总是 会断开,很纠结。后来使用

while (True):

    所有逻辑

强制执行。重开。算是解决耗时任务带来的问题吧

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 156,423评论 4 359
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,339评论 1 289
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 106,241评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,503评论 0 203
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,824评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,262评论 1 207
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,615评论 2 309
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,337评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 33,989评论 1 238
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,300评论 2 240
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,829评论 1 256
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,193评论 2 250
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,753评论 3 230
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 25,970评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,708评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,295评论 2 267
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,207评论 2 258

推荐阅读更多精彩内容