rabbitmq python接口_RabbitMQ&Python

本文详细介绍了RabbitMQ的Fanout、Direct和Topic三种Exchange类型,并提供了mac上安装和配置RabbitMQ的步骤,包括添加用户、设置权限等。此外,还探讨了Python使用pika库连接RabbitMQ时的注意事项,包括本地和远程连接的配置。
摘要由CSDN通过智能技术生成

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的一些操作 (登陆账户设置)

还有**官方**更详细的介绍

https://www.rabbitmq.com/man/rabbitmqctl.1.man.html

[此处输入链接的描述][2]

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

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

安装以及测试 实现简单的 收发 hello 这个相对 mac 感觉简单点啊,没mac复杂

mac 也可通过安装 pika 实现同类操作

进入web管理

参考这个

http://blog.csdn.net/i_bruce/article/details/39555417 但是

通过 rabbitmq官网安装 deb

使用 apt-get 安装 erlang

这篇文章有些安装还是比较麻烦的

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::

Connect to a host rabbit1 as the user www-data using the password

rabbit_pwd on the virtual host 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::

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::

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

3.2pika demo

3.2.1 consueme 就是 接受者

publish 发布者

遇到的问题

pip install ..

return

_setlocale(category, locale)

queue过多

容易出问题需要重启

读取json

time.sleep(location.count('.'))

阻塞,直到location全部读完。。

注意 路径问题。rabbit sshcommand 默认的 路径 是 /root

任何文件操作的 都要加 /**/.. 文件路径

查看队列 list

rabbitmqctl list_queues

更多用法及参数,可以执行如下命令查看

rabbitmqctl

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):

所有逻辑

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值