http://server.baseware.net:9000/project/datart/us/2?milestone=6 |
||
|---|---|---|
| .. | ||
| certs | ||
| deploy | ||
| publisher | ||
| receiver | ||
| README.md | ||
| go.mod | ||
| go.sum | ||
README.md
rabbitmq-demo
Demo 简介
该 Demo 演示了利用 RabbitMQ 官方库完成 Go 语言的生产消费模型搭建
目录结构
├── certs # 证书文件
│ ├── ca_certificate.pem
│ ├── client_certificate.pem
│ └── client_key.pem
├── deploy # 部署相关文件
│ ├── docker-compose.yml
│ ├── docker-compose1.yml
│ ├── rabbitmq.conf
│ └── rabbitmq.env
├── publisher # 生产者端代码
│ ├── publisher.go
│ └── ssl # tls 连接代码
│ └── publisher_with_ssl.go
└── receiver # 消费者端代码
├── message_release # without auto ack 代码
│ └── receiver_with_release.go
├── receiver.go
└── ssl # tls 连接代码
└── receiver.go
Demo分析
AMQP 协议简介
Publisher 部分
-
利用
rmq.NewEnvironment()方法创建连接使用的环境变量 -
利用
env.NewConnection()方法连接 RabbitMQ 服务端 -
利用
amqpConnection.Management()方法创建生产端管理模块 -
利用
management.Bind()方法创建Exchange、Queue的绑定关系
Receiver 部分
Receiver 部分管理与 RabbitMQ 服务端方法一致,但由于RabbitMQ 官方 AMQP 1.0 库不支持读取死信队列内消息,故死信队列消息读取切换为AMQP 0.91 协议
死信队列处理
利用 github.com/rabbitmq/amqp091-go 库进行死信队列消息的读取
- 利用
amqp.Dial()方法连接 RabbitMQ 服务端
SSL 部分
- 利用
os.ReadFile()、x509.NewCertPool()方法读取CA文件 - 利用
os.ReadFile()、pem.Decode()、pkcs8.ParsePKCS8PrivateKey()、x509.MarshalPKCS8PrivateKey()、tls.X509KeyPair()等方法创建TLS配置