1. 安装
安装erl:apt-get install erlang-nox
查看erl是否安装成功:erl
安装源:wget -O- https://www.rabbitmq.com/rabbitmq-release-signing-key.asc | sudo apt-key add -
更新源:apt-get update
安装rabbitmq:apt-get install rabbitmq-server
查看状态:systemctl status rabbitmq-server
开启WebUI管理页面:rabbitmq-plugins enable rabbitmq_management
重启:service rabbitmq-server restart
查看用户列表:rabbitmqctl list_users
添加【username】用户:rabbitmqctl add_user username password
给【username】用户管理员权限:rabbitmqctl set_user_tags username administrator
开机启动:systemctl enable rabbitmq-server
查看消息列队:rabbitmqctl list_queues
2.1 发送消息给队列(重启服务消息丢失)
import pika
credentials = pika.PlainCredentials('username', 'password')
connection = pika.BlockingConnection(pika.ConnectionParameters(
'10.131.70.49', 5672, '/', credentials))
channel = connection.channel()
# 声明消息队列,消息将在这个队列传递
channel.queue_declare(queue='balance')
# n RabbitMQ a message can never be sent directly to the queue, it always needs to go through an exchange.
channel.basic_publish(exchange='',
routing_key='balance',
body='Hello World!',
)
print(" [x] Sent 'Hello World!'")
connection.close()
2.2 发送消息给队列(持久化,重启服务消息还在)
import pika
credentials = pika.PlainCredentials('root', 'root')
connection = pika.BlockingConnection(pika.ConnectionParameters(
'10.131.70.49',5672,'/',credentials))
channel = connection.channel()
# 声明queue
channel.queue_declare(queue='durable',durable=True) # 多了durable=True
# n RabbitMQ a message can never be sent directly to the queue, it always needs to go through an exchange.
channel.basic_publish(exchange='',
routing_key='durable',
body='Hello cheng!',
properties=pika.BasicProperties(
delivery_mode=2, # make message persistent
)
)
print(" [x] Sent 'Hello cheng!'")
connection.close()
2.3 取消息
import pika
credentials = pika.PlainCredentials('root', 'root')
connection = pika.BlockingConnection(pika.ConnectionParameters(
'10.131.70.49', 5672, '/', credentials))
channel = connection.channel()
# 若取持久化的消息:
# channel.queue_declare(queue='balance', durable=True)
# 若取无持久化的消息:
channel.queue_declare(queue='balance')
def callback(ch, method, properties, body):
print(" [x] Received %r" % body)
channel.basic_consume('balance',
callback,
True
# False,在调用callback函数时,未收到确认标识,消息会重回队列。
# True,无论调用callback成功与否,消息都被消费掉
)
# no_ack 设置成 False,在调用callback函数时,未收到确认标识,消息会重回队列。
# True,无论调用callback成功与否,消息都被消费掉
print(' [*] Waiting for messages. To exit press CTRL+C')
channel.start_consuming()
网友评论