RabbitMQ是基于Erlang语言开发的消息队列中间件,因此在Ubuntu上安装前需先安装Erlang运行环境。此外,建议更新系统软件包以确保兼容性。
curl -fsSL https://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.asc | sudo gpg --dearmor -o /usr/share/keyrings/rabbitmq.gpg
echo "deb [signed-by=/usr/share/keyrings/rabbitmq.gpg] https://dl.bintray.com/rabbitmq-erlang/debian focal erlang-23.x" | sudo tee /etc/apt/sources.list.d/rabbitmq-erlang.list
sudo apt update && sudo apt install -y erlang
erl -version
若输出Erlang版本信息(如Erlang/OTP 23.x
),则表示安装成功。echo "deb [signed-by=/usr/share/keyrings/rabbitmq.gpg] https://dl.bintray.com/rabbitmq/debian focal main" | sudo tee /etc/apt/sources.list.d/rabbitmq.list
sudo apt update && sudo apt install -y rabbitmq-server
sudo systemctl start rabbitmq-server
sudo systemctl enable rabbitmq-server
sudo systemctl status rabbitmq-server
若显示active (running)
,则表示服务已正常运行。RabbitMQ自带Web管理界面,默认监听15672
端口,需手动启用:
sudo rabbitmq-plugins enable rabbitmq_management
启用后,可通过浏览器访问http://<服务器IP>:15672
查看管理界面。
默认的guest
用户仅允许本地访问(localhost
),生产环境需创建新用户并授予权限:
# 创建用户(用户名:admin,密码:yourpassword)
sudo rabbitmqctl add_user admin yourpassword
# 设置用户角色为管理员(administrator)
sudo rabbitmqctl set_user_tags admin administrator
# 授予用户所有权限(对虚拟主机/的读、写、配置权限)
sudo rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"
此后,可使用admin/yourpassword
登录管理界面。
若Ubuntu启用了ufw
防火墙,需放行RabbitMQ的AMQP(5672
)和管理(15672
)端口:
sudo ufw allow 5672/tcp # AMQP协议端口(生产者/消费者通信)
sudo ufw allow 15672/tcp # Web管理界面端口
sudo ufw reload
sudo rabbitmqctl list_users
sudo rabbitmqctl delete_user <username>
虚拟主机用于隔离不同业务的队列和交换机:
sudo rabbitmqctl add_vhost <vhost_name>
(如/my_vhost
)sudo rabbitmqctl delete_vhost <vhost_name>
sudo rabbitmqctl set_permissions -p <vhost_name> <username> ".*" ".*" ".*"
sudo rabbitmqctl list_queues
sudo rabbitmqctl list_exchanges
sudo rabbitmqctl purge_queue <queue_name>
pip install pika
创建producer.py
文件:
import pika
# 连接RabbitMQ服务器(本地默认)
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()
# 声明队列(若不存在则创建,durable=True表示队列持久化)
channel.queue_declare(queue='hello', durable=True)
# 发送消息(delivery_mode=2表示消息持久化)
channel.basic_publish(
exchange='',
routing_key='hello',
body='Hello, RabbitMQ!',
properties=pika.BasicProperties(delivery_mode=2)
)
print(" [x] Sent 'Hello, RabbitMQ!'")
connection.close()
运行生产者:python producer.py
创建consumer.py
文件:
import pika
# 连接RabbitMQ服务器
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()
# 声明队列(确保队列存在)
channel.queue_declare(queue='hello', durable=True)
# 定义消息处理回调函数
def callback(ch, method, properties, body):
print(f" [x] Received {body.decode()}")
# 设置公平分发(避免消费者过载)
channel.basic_qos(prefetch_count=1)
# 开始监听队列(auto_ack=False表示手动确认消息)
channel.basic_consume(
queue='hello',
on_message_callback=callback,
auto_ack=False
)
print(' [*] Waiting for messages. To exit press CTRL+C')
channel.start_consuming()
运行消费者:python consumer.py
当生产者发送消息后,消费者将打印接收到的消息。
sudo rabbitmqctl delete_user guest
/etc/rabbitmq/rabbitmq.conf
中添加SSL配置(需提前生成证书):listeners.ssl.default = 5671
ssl_options.cacertfile = /path/to/ca_certificate.pem
ssl_options.certfile = /path/to/server_certificate.pem
ssl_options.keyfile = /path/to/server_key.pem
ssl_options.verify = verify_peer
ssl_options.fail_if_no_peer_cert = true
重启服务生效:sudo systemctl restart rabbitmq-server
通过以上步骤,您已完成RabbitMQ在Ubuntu上的安装、配置及基础使用。可根据实际需求扩展高级特性(如交换机类型、路由规则、集群部署等)。