1、什麼是RabbitMQ?html
消息隊列(Message Queue)是一種應用間的通訊方式,消息發送後能夠當即返回,由消息系統來確保消息的可靠傳遞。消息發佈者只管把消息發佈到 MQ 中而不用管誰來取,消息使用者只管從 MQ 中取消息而無論是誰發佈的。這樣發佈者和使用者都不用知道對方的存在。node
rabbitMQ是一款基於AMQP協議的消息中間件,它可以在應用之間提供可靠的消息傳輸。在易用性,擴展性,高可用性上表現優秀。使用消息中間件利於應用之間的解耦,生產者(客戶端)無需知道消費者(服務端)的存在。並且兩端能夠使用不一樣的語言編寫,大大提供了靈活性。python
2、RabbitMQ安裝c++
''' rabbitmq 源碼安裝 官網地址:rabbitmq http://www.rabbitmq.com/releases/rabbitmq-server/ 官網地址:erlang http://erlang.org/download/ 1、概念: Broker:簡單來講就是消息隊列服務器實體。 Exchange:消息交換機,它指定消息按什麼規則,路由到哪一個隊列。 Queue:消息隊列載體,每一個消息都會被投入到一個或多個隊列。 Binding:綁定,它的做用就是把exchange和queue按照路由規則綁定起來。 Routing Key:路由關鍵字,exchange根據這個關鍵字進行消息投遞。 vhost:虛擬主機,一個broker裏能夠開設多個vhost,用做不一樣用戶的權限分離。 producer:消息生產者,就是投遞消息的程序。 consumer:消息消費者,就是接受消息的程序。 channel:消息通道,在客戶端的每一個鏈接裏,可創建多個channel,每一個channel表明一個會話任務。 2、安裝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 ~]# # 表示啓動成功 3、管理命令 啓動:rabbitmq-server start 關閉:rabbitmqctl stop 狀態:rabbitmqctl status 4、插件 啓動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角色 5、用戶管理 默認的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、其它) 當即生效,不需重啓 6、建立配置文件 [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 保存並退出 7、重啓rabbitmq-server並測試訪問 rabbitmqctl stop rabbitmqctl start 瀏覽器訪問 1. 查看本身的服務器ip地址 ifconfig # inet addr:172.24.129.3 ===> 服務器ip地址 2. 瀏覽器訪問 http://39.104.109.159:15672 ===> 輸入用戶密碼登陸便可 登陸成功!完成 '''
3、工做模式web
一、簡單模式瀏覽器
生產者示例:服務器
# ######################### 生產者 ######################### #!/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()
消費者示例:tcp
# ########################## 消費者 ########################## 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()
二、exchange模型oop
4、基於RabbitMQ的RPC測試
詳細內容請參考博客:http://www.cnblogs.com/yuanchenqi/articles/8507109.html