关键词:Go、Golang、消息队列、MQ、RabbitMQ、Kafka、可靠传输、异步处理、微服务
一、为什么要用消息队列?
在现代分布式系统和微服务架构中,消息队列 (Message Queue, MQ) 扮演着核心角色:
-
解耦系统
- 生产者和消费者异步通信,系统各模块不直接依赖
-
缓冲高峰流量
- 高峰期流量可暂存于队列,平滑系统处理压力
-
异步处理任务
- 批量任务、耗时操作可异步执行
-
可靠性
- 支持消息确认、重试和持久化,防止数据丢失
常用消息队列:
- RabbitMQ:轻量、AMQP 协议、易用
- Kafka:高吞吐量、持久化、日志流处理
- NSQ、NATS:高性能、分布式
二、Go 与消息队列的连接
2.1 选择 Go 客户端
- RabbitMQ:
github.com/streadway/amqp
- Kafka:
github.com/segmentio/kafka-go
- NSQ:
github.com/nsqio/go-nsq
本文以 RabbitMQ 为示例。
2.2 安装 RabbitMQ 客户端
go get github.com/streadway/amqp
三、Go 与 RabbitMQ 实战
3.1 连接与通道
package main
import (
"log"
"github.com/streadway/amqp"
)
func failOnError(err error, msg string) {
if err != nil {
log.Fatalf("%s: %s", msg, err)