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
This commit is contained in:
parent
9fe44e58b5
commit
7aaf993d30
|
|
@ -0,0 +1,61 @@
|
||||||
|
# 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` 配置
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
module rabbitmq_example
|
||||||
|
|
||||||
|
go 1.24.1
|
||||||
|
|
||||||
|
require (
|
||||||
|
github.com/Azure/go-amqp v1.4.0
|
||||||
|
github.com/rabbitmq/amqp091-go v1.10.0
|
||||||
|
github.com/rabbitmq/rabbitmq-amqp-go-client v0.1.1
|
||||||
|
github.com/youmark/pkcs8 v0.0.0-20240726163527-a2c0da244d78
|
||||||
|
)
|
||||||
|
|
||||||
|
require (
|
||||||
|
github.com/google/uuid v1.6.0 // indirect
|
||||||
|
golang.org/x/crypto v0.22.0 // indirect
|
||||||
|
)
|
||||||
|
|
@ -0,0 +1,46 @@
|
||||||
|
github.com/Azure/go-amqp v1.4.0 h1:Xj3caqi4comOF/L1Uc5iuBxR/pB6KumejC01YQOqOR4=
|
||||||
|
github.com/Azure/go-amqp v1.4.0/go.mod h1:vZAogwdrkbyK3Mla8m/CxSc/aKdnTZ4IbPxl51Y5WZE=
|
||||||
|
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
||||||
|
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
|
github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw=
|
||||||
|
github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g=
|
||||||
|
github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY=
|
||||||
|
github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
|
||||||
|
github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI=
|
||||||
|
github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8=
|
||||||
|
github.com/golang-jwt/jwt/v5 v5.2.2 h1:Rl4B7itRWVtYIHFrSNd7vhTiz9UpLdi6gZhZ3wEeDy8=
|
||||||
|
github.com/golang-jwt/jwt/v5 v5.2.2/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk=
|
||||||
|
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
|
||||||
|
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
|
||||||
|
github.com/google/pprof v0.0.0-20241210010833-40e02aabc2ad h1:a6HEuzUHeKH6hwfN/ZoQgRgVIWFJljSWa/zetS2WTvg=
|
||||||
|
github.com/google/pprof v0.0.0-20241210010833-40e02aabc2ad/go.mod h1:vavhavw2zAxS5dIdcRluK6cSGGPlZynqzFM8NdvU144=
|
||||||
|
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
|
||||||
|
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||||
|
github.com/onsi/ginkgo/v2 v2.22.1 h1:QW7tbJAUDyVDVOM5dFa7qaybo+CRfR7bemlQUN6Z8aM=
|
||||||
|
github.com/onsi/ginkgo/v2 v2.22.1/go.mod h1:S6aTpoRsSq2cZOd+pssHAlKW/Q/jZt6cPrPlnj4a1xM=
|
||||||
|
github.com/onsi/gomega v1.36.2 h1:koNYke6TVk6ZmnyHrCXba/T/MoLBXFjeC1PtvYgw0A8=
|
||||||
|
github.com/onsi/gomega v1.36.2/go.mod h1:DdwyADRjrc825LhMEkD76cHR5+pUnjhUN8GlHlRPHzY=
|
||||||
|
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||||
|
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||||
|
github.com/rabbitmq/amqp091-go v1.10.0 h1:STpn5XsHlHGcecLmMFCtg7mqq0RnD+zFr4uzukfVhBw=
|
||||||
|
github.com/rabbitmq/amqp091-go v1.10.0/go.mod h1:Hy4jKW5kQART1u+JkDTF9YYOQUHXqMuhrgxOEeS7G4o=
|
||||||
|
github.com/rabbitmq/rabbitmq-amqp-go-client v0.1.1 h1:1J5coTThj/aUtXIcF3MPutixEuWS8wNimYhB1yvdS24=
|
||||||
|
github.com/rabbitmq/rabbitmq-amqp-go-client v0.1.1/go.mod h1:sWDACr1vf9I61KNzh3tJ5pIdKXYsMXNrRpuayaNaKxg=
|
||||||
|
github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
|
||||||
|
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
|
||||||
|
github.com/youmark/pkcs8 v0.0.0-20240726163527-a2c0da244d78 h1:ilQV1hzziu+LLM3zUTJ0trRztfwgjqKnBWNtSRkbmwM=
|
||||||
|
github.com/youmark/pkcs8 v0.0.0-20240726163527-a2c0da244d78/go.mod h1:aL8wCCfTfSfmXjznFBSZNN13rSJjlIOI1fUNAtF7rmI=
|
||||||
|
go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
|
||||||
|
go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
|
||||||
|
golang.org/x/crypto v0.22.0 h1:g1v0xeRhjcugydODzvb3mEM9SQ0HGp9s/nh3COQ/C30=
|
||||||
|
golang.org/x/crypto v0.22.0/go.mod h1:vr6Su+7cTlO45qkww3VDJlzDn0ctJvRgYbC2NvXHt+M=
|
||||||
|
golang.org/x/net v0.38.0 h1:vRMAPTMaeGqVhG5QyLJHqNDwecKTomGeqbnfZyKlBI8=
|
||||||
|
golang.org/x/net v0.38.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8=
|
||||||
|
golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik=
|
||||||
|
golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
|
||||||
|
golang.org/x/text v0.23.0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY=
|
||||||
|
golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4=
|
||||||
|
golang.org/x/tools v0.28.0 h1:WuB6qZ4RPCQo5aP3WdKZS7i595EdWqWR8vqJTlwTVK8=
|
||||||
|
golang.org/x/tools v0.28.0/go.mod h1:dcIOrVd3mfQKTgrDVQHqCPMWy6lnhfhtX3hLXYVLfRw=
|
||||||
|
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
||||||
|
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||||
Loading…
Reference in New Issue