python使用rabbitmq收發消息


 

在centos上使用yum安裝rabbitmq-server

 

rabbitmq及其依賴環境

rabbitmq安裝之前需要安裝socat,否則直接安裝rabbitmq可能會報錯

如果沒有找到,則先安裝epel源  yum -y install epel-release

yum install socat

rabbitMQ需要和erlang的版本互相匹配具體查看rabbitMQ和對應的erlang版本匹配

在本文中,使用erlang-20.3.8.20-1.el7和rabbitmq-server-3.7.6-1.el7版本。

選擇erlang-20.3.x可以兼容新的rabbitMQ3.7.x版本

安裝erlang

使用rabbitMQ的鏡像地址:https://github.com/rabbitmq/erlang-rpm

將下面內容復制到/etc/yum.repos.d/rabbitmq_erlang.repo文件中

保存后使用yum下載安裝。

yum install erlang-版本號

版本號可以通過訪問https://packagecloud.io/rabbitmq/erlang獲取到要安裝的對應版本。

復制代碼
# In /etc/yum.repos.d/rabbitmq_erlang.repo
[rabbitmq_erlang]
name=rabbitmq_erlang
baseurl=https://packagecloud.io/rabbitmq/erlang/el/7/$basearch
repo_gpgcheck=1
gpgcheck=0
enabled=1
gpgkey=https://packagecloud.io/rabbitmq/erlang/gpgkey
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300

[rabbitmq_erlang-source]
name=rabbitmq_erlang-source
baseurl=https://packagecloud.io/rabbitmq/erlang/el/7/SRPMS
repo_gpgcheck=1
gpgcheck=0
enabled=1
gpgkey=https://packagecloud.io/rabbitmq/erlang/gpgkey
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300
復制代碼

在這里我是用版本為20.3.x這樣就可以兼容兩個mq的版本

yum install erlang-20.3.8.20-1.el7

 

rabbitMQ-server下載安裝

使用腳本執行生成rabbitmq_rabbitmq-server.repo文件

curl -s https://packagecloud.io/install/repositories/rabbitmq/rabbitmq-server/script.rpm.sh | sudo bash

或者直接將下面內容復制到/etc/yum.repos.d/rabbitmq_rabbitmq-server.repo文件中

復制代碼
[rabbitmq_rabbitmq-server]
name=rabbitmq_rabbitmq-server
baseurl=https://packagecloud.io/rabbitmq/rabbitmq-server/el/7/$basearch
repo_gpgcheck=1
gpgcheck=0
enabled=1
gpgkey=https://packagecloud.io/rabbitmq/rabbitmq-server/gpgkey
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300

[rabbitmq_rabbitmq-server-source]
name=rabbitmq_rabbitmq-server-source
baseurl=https://packagecloud.io/rabbitmq/rabbitmq-server/el/7/SRPMS
repo_gpgcheck=1
gpgcheck=0
enabled=1
gpgkey=https://packagecloud.io/rabbitmq/rabbitmq-server/gpgkey
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300
復制代碼

yum下載安裝

默認使用yum install rabbitmq-server是安裝最新版本的rabbitmq

yum install rabbitmq-server-3.7.6-1.el7

 

rabbitmq安裝完后,操作使用

復制代碼
啟動RabbitMQ服務
#service rabbitmq-server start
狀態查看
#rabbitmqctl status
啟用插件
#rabbitmq-plugins enable rabbitmq_management
重啟服務
#service rabbitmq-server restart
添加帳號:name 密碼:passwd
#rabbitmqctl add_user name passwd
賦予其administrator角色
#rabbitmqctl set_user_tags name administrator
設置權限
#rabbitmqctl set_permissions -p / name ".*" ".*" ".*"
復制代碼

rabbit默認的web端口號是15672

訪問http://ip:15672進入web管理頁面了

注意放通外網訪問,我的是騰訊雲服務器,需要配置安全組策略,增加外部訪問策略放通TCP:15672

 

測試:發消息

import pika
import random


credentials = pika.PlainCredentials('liruixin', 'Gaosi')

connection = pika.BlockingConnection(pika.ConnectionParameters(host='39.105.98.92', port=5672, virtual_host='/', credentials=credentials))

channel = connection.channel()


# 聲明一個隊列,生產者和消費者都要聲明一個相同的隊列,用來防止萬一某一方掛了,另一方能正常運行
channel.queue_declare(queue='hello')

number = random.randint(1, 1000)
body = 'hello world:%s' % number
# 交換機; 隊列名,寫明將消息發往哪個隊列; 消息內容
# routing_key在使用匿名交換機的時候才需要指定,表示發送到哪個隊列
channel.basic_publish(exchange='', routing_key='hello', body="liruixin")
print (" [x] Sent %s" % body)
connection.close()

  測試 收消息

import pika
import random

credentials = pika.PlainCredentials('liruixin', 'Gaosi')
connection = pika.BlockingConnection(pika.ConnectionParameters(host='39.15.98.72', port=5672, virtual_host='/', credentials=credentials))
channel = connection.channel()
# 聲明一個隊列,生產者和消費者都要聲明一個相同的隊列,用來防止萬一某一方掛了,另一方能正常運行
channel.queue_declare(queue='hello')


def callback(ch, method, properties, body):
    print (body)

# 告訴rabbitmq使用callback來接收信息
channel.basic_consume('hello',callback, True)

# 開始接收信息,並進入阻塞狀態,隊列里有信息才會調用callback進行處理,按ctrl+c退出
print (' [*] Waiting for messages. To exit press CTRL+C')
channel.start_consuming()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM