golang-demo/rabbitmq_example
douxu 7aaf993d30 refactor(add-rabbitMQ-demo-with-go-language): 1. add demo of without auto ack 2.add demo of ssl conn
http://server.baseware.net:9000/project/datart/us/2?milestone=6
2025-07-18 16:24:48 +08:00
..
certs initial commit 2025-07-17 16:32:35 +08:00
deploy refactor(add-rabbitMQ-demo-with-go-language): 1. add demo of without auto ack 2.add demo of ssl conn 2025-07-18 16:24:48 +08:00
publisher initial commit 2025-07-17 16:32:35 +08:00
receiver initial commit 2025-07-17 16:32:35 +08:00
README.md refactor(add-rabbitMQ-demo-with-go-language): 1. add demo of without auto ack 2.add demo of ssl conn 2025-07-18 16:24:48 +08:00
go.mod refactor(add-rabbitMQ-demo-with-go-language): 1. add demo of without auto ack 2.add demo of ssl conn 2025-07-18 16:24:48 +08:00
go.sum refactor(add-rabbitMQ-demo-with-go-language): 1. add demo of without auto ack 2.add demo of ssl conn 2025-07-18 16:24:48 +08:00

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 协议简介

  1. Golang AMQP 1.0 协议
  2. Golang AMQP 0.91 协议

Publisher 部分

  • 利用 rmq.NewEnvironment() 方法创建连接使用的环境变量

  • 利用 env.NewConnection() 方法连接 RabbitMQ 服务端

  • 利用 amqpConnection.Management() 方法创建生产端管理模块

  • 利用 management.Bind() 方法创建 ExchangeQueue 的绑定关系

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