RabbitMQ 和 Kafka 异步消息处理平台
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://你的服务器IP:9092 # 必须修改为服务器IP或域名!- ./rabbitmq.conf:/etc/rabbitmq/rabbitmq.conf:ro # 挂载自定义配置(可选)KAFKA_CONTROLLER_QUORUM_VOTERS: 1@kafka1:9093 # 节点ID@主机名:端口。# 设置一个强密码
第一部分:RabbitMQ 生产级安装与使用
1. 安装 Docker 与 Docker Compose
确保你的服务器已安装 Docker 和 Docker Compose。
# 安装 Docker
curl -fsSL https://get.docker.com | sh
sudo systemctl enable docker
sudo systemctl start docker
# 安装 Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/download/v2.27.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
2. 创建部署目录与文件
mkdir ~/rabbitmq-production && cd ~/rabbitmq-production
vim docker-compose.yml
3. 编写 Docker Compose 文件
将以下内容粘贴到 docker-compose.yml中。这是一个包含管理界面、持久化数据、固定端口的生产基础配置。
version: '3.8'
services:
rabbitmq:
image: rabbitmq:3.13-management-alpine # 使用带管理插面的版本
container_name: rabbitmq
hostname: rabbitmq-host # 设置主机名,很重要
restart: unless-stopped # 总是重启,除非手动停止
ports:
- "5672:5672" # AMQP 协议端口,应用程序连接用
- "15672:15672" # Web 管理界面端口
environment:
- RABBITMQ_DEFAULT_USER=admin # 设置默认用户名
- RABBITMQ_DEFAULT_PASS=YourStrongPasswordHere! # 设置一个强密码!
# - RABBITMQ_DEFAULT_VHOST=/my_vhost # 可选:设置默认虚拟主机
volumes:
- rabbitmq_data:/var/lib/rabbitmq # 数据持久化
- ./rabbitmq.conf:/etc/rabbitmq/rabbitmq.conf:ro # 挂载自定义配置(可选)
networks:
- rabbitmq_net
volumes:
rabbitmq_data: # 命名卷,数据不会丢失
driver: local
networks:
rabbitmq_net:
driver: bridge
4. 启动 RabbitMQ 服务
docker-compose up -d
5. 验证与基本使用
1.检查服务状态:
docker-compose logs -f # 查看日志,确认无报错
docker-compose ps # 查看容器状态
2.访问管理后台:
打开浏览器,访问 http://你的服务器IP:15672
用户名:admin
密码:YourStrongPasswordHere!
你能看到完整的控制台,可以管理连接、通道、队列、交换器等。
3.生产环境关键配置(在管理界面操作):
创建虚拟主机 (Vhost):在 Admin -> Virtual Hosts -> Add a new virtual host下添加,如 /prod。用于环境隔离。
创建用户并授权:在 Admin -> Users -> Add a user下创建应用用户,不要使用 admin。然后点击用户名,在 Permissions标签页中,授予其对应 Vhost 的 .*权限(配置、写、读)。
设置镜像队列(高可用核心):进入 Admin -> Policies -> Add / update a policy。
Name: ha-policy
Pattern: ^(匹配所有队列名)
Definition: ha-mode= all(镜像到所有节点)
Priority: 0
点击 Add policy。此后创建的所有队列都会成为镜像队列,即使一个节点宕机,队列也不会丢失。
第二部分:Kafka 生产级安装与使用
Kafka 依赖 Zookeeper,所以我们需要同时部署两者。
1. 创建部署目录与文件
mkdir ~/kafka-production && cd ~/kafka-production
vim docker-compose.yml
将以下内容粘贴到 docker-compose.yml中。这是一个包含 Kraft 模式(去Zookeeper) 的集群配置,更简单。
version: '3.8'
services:
kafka1:
image: apache/kafka:3.7.0 # 使用最新版本
container_name: kafka1
restart: unless-stopped
ports:
- "9092:9092" # 对外暴露的监听端口
environment:
# 每个Broker的唯一ID
KAFKA_NODE_ID: 1
# 用于发现的其他Broker列表(如果是单机,就写自己)
KAFKA_LISTENER_SECURITY_PROTOCOL: PLAINTEXT
KAFKA_LISTENERS: PLAINTEXT://:9092
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://你的服务器IP:9092 # 必须修改为服务器IP或域名!
# Kraft 相关配置
KAFKA_PROCESS_ROLES: broker,controller
KAFKA_CONTROLLER_QUORUM_VOTERS: 1@kafka1:9093 # 节点ID@主机名:端口
# 集群名称
KAFKA_CLUSTER_ID: MkU3OEVBNTcwNTJENDM2Qk
# 其他配置
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 1
KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 1
KAFKA_AUTO_CREATE_TOPICS_ENABLE: 'false' # 生产环境建议关闭自动创建Topic
KAFKA_NUM_PARTITIONS: 3 # 默认分区数
KAFKA_LOG_RETENTION_HOURS: 168 # 数据保留时间,168小时=7天
volumes:
- kafka_data1:/var/lib/kafka/data
networks:
- kafka_net
kafka-ui: # 一个非常好用的Kafka管理界面
image: provectuslabs/kafka-ui:latest
container_name: kafka-ui
restart: unless-stopped
ports:
- "8989:8080" # 管理界面端口
environment:
- KAFKA_CLUSTERS_0_NAME=local-kafka
- KAFKA_CLUSTERS_0_BOOTSTRAP_SERVERS=kafka1:9092
- DYNAMIC_CONFIG_ENABLED=true
depends_on:
- kafka1
networks:
- kafka_net
volumes:
kafka_data1:
driver: local
networks:
kafka_net:
driver: bridge
重要:将 KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://你的服务器IP:9092中的 你的服务器IP替换为服务器的真实公网IP或内网IP(客户端用什么地址连接,就填什么)。
3. 启动 Kafka 服务
docker-compose up -d
访问管理后台
打开浏览器,访问 http://你的服务器IP:8989
你可以在 UI 中看到 Brokers、Topics、Messages 等所有信息。
生产环境关键操作(在Kafka-UI中或命令行):
创建Topic:在 Kafka-UI 的 Topics -> Add a Topic中创建。
Name: my-topic
Number of partitions: 3(根据吞吐量需求设置)
Replication factor: 1(单节点只能为1,集群可设为2或3)
点击 Create。
生产和消费消息(测试):
在 Kafka-UI 的 Topics列表中找到你创建的 Topic,点击进入。
选择 Messages标签页,你可以直接输入 Key/Value 并 Produce 消息。
点击 Consume 按钮,即可开始消费消息。
命令行测试:
# 进入Kafka容器
docker exec -it kafka1 /bin/bash
# 启动一个控制台生产者(在容器内)
/opt/kafka/bin/kafka-console-producer.sh --bootstrap-server localhost:9092 --topic my-topic
# 启动一个控制台消费者(新开一个终端,进入容器)
/opt/kafka/bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic my-topic --from-beginning
第三部分:应用连接
现在你的两个消息中间件都已就绪。
连接 RabbitMQ:
Host: 你的服务器IP
Port: 5672
Username: admin(建议创建新用户)
Password: YourStrongPasswordHere!
Virtual Host: /(或你创建的 /prod)
连接 Kafka:
Bootstrap Servers: 你的服务器IP:9092
其他配置: 根据你的客户端语言(Java/Python/Go等)进行配置。
更多推荐



所有评论(0)