golang-demo/rabbitmq_example/README.md

62 lines
1.9 KiB
Markdown
Raw Normal View History

# rabbitmq-demo
## Demo 简介
该 Demo 演示了利用 RabbitMQ 官方库完成 Go 语言的生产消费模型搭建
## 目录结构
``` bash
├── 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 协议简介
1. [Golang AMQP 1.0 协议](github.com/rabbitmq/rabbitmq-amqp-go-client/pkg/rabbitmqamqp)
2. [Golang AMQP 0.91 协议](github.com/rabbitmq/amqp091-go)
### 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` 配置