python之路_RabbitMQ相关介绍
一、什么是RabbitMQ?
消息队列(Message Queue)是一种应用间的通信方式,消息发送后可以立即返回,由消息系统来确保消息的可靠传递。消息发布者只管把消息发布到 MQ 中而不用管谁来取,消息使用者只管从 MQ 中取消息而不管是谁发布的。这样发布者和使用者都不用知道对方的存在。
rabbitMQ是一款基于AMQP协议的消息中间件,它能够在应用之间提供可靠的消息传输。在易用性,扩展性,高可用性上表现优秀。使用消息中间件利于应用之间的解耦,生产者(客户端)无需知道消费者(服务端)的存在。而且两端可以使用不同的语言编写,大大提供了灵活性。
二、RabbitMQ安装
''' rabbitmq 源码安装 官网地址:rabbitmq http://www.rabbitmq.com/releases/rabbitmq-server/ 官网地址:erlang http://erlang.org/download/ 一、概念: Broker:简单来说就是消息队列服务器实体。 Exchange:消息交换机,它指定消息按什么规则,路由到哪个队列。 Queue:消息队列载体,每个消息都会被投入到一个或多个队列。 Binding:绑定,它的作用就是把exchange和queue按照路由规则绑定起来。 Routing Key:路由关键字,exchange根据这个关键字进行消息投递。 vhost:虚拟主机,一个broker里可以开设多个vhost,用作不同用户的权限分离。 producer:消息生产者,就是投递消息的程序。 consumer:消息消费者,就是接受消息的程序。 channel:消息通道,在客户端的每个连接里,可建立多个channel,每个channel代表一个会话任务。 二、安装RabbitMQ CentOS: 1.先安装erlang # PS: 注意安装操作首先要切换到root工作环节中 # 在命令 如果$ 表示是普通用户, yum -y install make gcc gcc-c++ kernel-devel m4 ncurses-devel openssl-devel yum -y install ncurses-devel yum install ncurses-devel wget http://erlang.org/download/otp_src_19.3.tar.gz tar -xzvf otp_src_19.3.tar.gz cd otp_src_19.3 ./configure --prefix=/usr/local/erlang --with-ssl --enable-threads --enable-smp-support --enable-kernel-poll --enable-hipe make && make install 配置erlang环境 vi /etc/profile #在最后添加下文 PATH=$PATH:/usr/local/erlang/bin 使环境变量生效 source /etc/profile 测试一下是否安装成功,在控制台输入命令erl crt+z 退出 2.安装rabbitmq wget http://www.rabbitmq.com/releases/rabbitmq-server/v3.5.8/rabbitmq-server-3.5.8.tar.gz tar -zxvf rabbitmq-server-3.5.8.tar.gz cd rabbitmq-server-3.5.8 make make TARGET_DIR=/usr/local/rabbitmq SBIN_DIR=/usr/local/rabbitmq/sbin MAN_DIR=/usr/local/rabbitmq/man DOC_INSTALL_DIR=/usr/local/rabbitmq/doc install 配置erlang环境 vi /etc/profile #在最后添加下文 PATH=$PATH:/usr/local/erlang/bin:/usr/local/rabbitmq/sbin 使环境变量生效 source /etc/profile 3. 启动:rabbitmq-server rabbitmq-server start 4. 检查服务启动状态 [root@node01 ~]# netstat -lnpt|grep beam tcp 0 0 0.0.0.0:5672 0.0.0.0:* LISTEN 19733/beam tcp 0 0 0.0.0.0:25672 0.0.0.0:* LISTEN 19733/beam tcp 0 0 0.0.0.0:15672 0.0.0.0:* LISTEN 19733/beam [root@node01 ~]# # 表示启动成功 三、管理命令 启动:rabbitmq-server start 关闭:rabbitmqctl stop 状态:rabbitmqctl status 四、插件 启动web管理插件 rabbitmq-plugins enable rabbitmq_management 如果报错 错误解决: Error: {cannot_write_enabled_plugins_file,"/etc/rabbitmq/enabled_plugins", enoent} mkdir /etc/rabbitmq 重新启动输入地址:localhost:15672,帐号默认为guest,密码guest,此帐号默认只能在本机访问。不建议打开远程访问。你可以创建一个帐户,并设置可以远程访问的角色进行访问。 如: rabbitmqctl add_user supery 123 # 创建用户supery rabbitmqctl set_user_tags supery administrator # 给创建的supery用户administrator角色 五、用户管理 默认的guest帐户相当于root帐户 rabbitmqctl add_user username password 添加帐户 rabbitmqctl change_password username newpassword 修改密码 rabbitmqctl delete_user username 删除帐户 rabbitmqctl list_users 列出所有帐户 rabbitmqctl set_user_tags User Tag 设置角色(administrator、monitoring、policymaker、management、其它) 立即生效,不需重启 六、创建配置文件 [root@node01 ~]# ll /etc/rabbitmq/ total 8 -rw-r--r-- 1 root root 23 Mar 5 10:07 enabled_plugins -rw-r--r-- 1 root root 51 Mar 5 10:12 rabbitmq.config [root@node01 ~]# cat /etc/rabbitmq/rabbitmq.config [{rabbit, [{loopback_users, ["root","supery"]}]}]. 操作步骤: vi /etc/rabbitmq/rabbitmq.config 将[{rabbit, [{loopback_users, ["root","supery"]}]}]. 复制到文件中即可 esc :x 保存并退出 七、重启rabbitmq-server并测试访问 rabbitmqctl stop rabbitmqctl start 浏览器访问 1. 查看自己的服务器ip地址 ifconfig # inet addr:172.24.129.3 ===> 服务器ip地址 2. 浏览器访问 http://39.104.109.159:15672 ===> 输入用户密码登录即可 登录成功!完成 '''
三、工作模式
1、简单模式
生产者示例:
# ######################### 生产者 ######################### #!/usr/bin/env python import pika connection = pika.BlockingConnection(pika.ConnectionParameters( host='localhost')) channel = connection.channel() channel.queue_declare(queue='hello') channel.basic_publish(exchange='', routing_key='hello', body='Hello World!') print(" [x] Sent 'Hello World!'") connection.close()
消费者示例:
# ########################## 消费者 ########################## connection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost')) channel = connection.channel() channel.queue_declare(queue='hello') def callback(ch, method, properties, body): 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()
2、exchange模型
四、基于RabbitMQ的RPC
详细内容请参考博客:http://www.cnblogs.com/yuanchenqi/articles/8507109.html