golang-demo/rabbitmq_example/README.md

62 lines
1.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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` 配置