fix
This commit is contained in:
26
rabbitmq/connect.go
Normal file
26
rabbitmq/connect.go
Normal file
@@ -0,0 +1,26 @@
|
||||
package rabbitmq
|
||||
|
||||
import (
|
||||
"log"
|
||||
|
||||
"github.com/streadway/amqp"
|
||||
)
|
||||
|
||||
func Open(url string) (*amqp.Connection, *amqp.Channel, error) {
|
||||
conn, err := amqp.Dial(url)
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
|
||||
ch, err := conn.Channel()
|
||||
if err != nil {
|
||||
log.Printf("Failed to open a channel: %v\n", err)
|
||||
return nil, nil, err
|
||||
}
|
||||
|
||||
return conn, ch, nil
|
||||
}
|
||||
|
||||
func Close(conn *amqp.Connection) {
|
||||
conn.Close()
|
||||
}
|
||||
5
rabbitmq/go.mod
Normal file
5
rabbitmq/go.mod
Normal file
@@ -0,0 +1,5 @@
|
||||
module git.pbiernat.dev/egommerce/go-api-pkg/rabbitmq
|
||||
|
||||
go 1.18
|
||||
|
||||
require github.com/streadway/amqp v1.0.0
|
||||
2
rabbitmq/go.sum
Normal file
2
rabbitmq/go.sum
Normal file
@@ -0,0 +1,2 @@
|
||||
github.com/streadway/amqp v1.0.0 h1:kuuDrUJFZL1QYL9hUNuCxNObNzB0bV/ZG5jV3RWAQgo=
|
||||
github.com/streadway/amqp v1.0.0/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw=
|
||||
85
rabbitmq/queue.go
Normal file
85
rabbitmq/queue.go
Normal file
@@ -0,0 +1,85 @@
|
||||
package rabbitmq
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"log"
|
||||
|
||||
"github.com/streadway/amqp"
|
||||
)
|
||||
|
||||
type Message map[string]interface{}
|
||||
|
||||
func Serialize(msg any) (string, error) {
|
||||
var b bytes.Buffer
|
||||
encoder := json.NewEncoder(&b)
|
||||
err := encoder.Encode(msg)
|
||||
|
||||
return b.String(), err
|
||||
}
|
||||
|
||||
func Deserialize(b []byte) (Message, error) {
|
||||
var msg Message
|
||||
buf := bytes.NewBuffer(b)
|
||||
decoder := json.NewDecoder(buf)
|
||||
err := decoder.Decode(&msg)
|
||||
|
||||
return msg, err
|
||||
}
|
||||
|
||||
func NewExchange(chn *amqp.Channel, name string) error {
|
||||
err := chn.ExchangeDeclare(
|
||||
name,
|
||||
"direct", // type
|
||||
true, // durable
|
||||
false, // auto-deleted
|
||||
false, // internal
|
||||
false, // no-wait
|
||||
nil, // arguments
|
||||
)
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func Publish(chn *amqp.Channel, name, routingKey string, msg any) error {
|
||||
jsonData, err := Serialize(msg)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
msgBody := fmt.Sprintf(`{"event":"%T","data":%s}`, msg, jsonData)
|
||||
chn.Publish(
|
||||
name, // exchange name
|
||||
routingKey, // routing key
|
||||
false, // mandatory
|
||||
false, // immediate
|
||||
amqp.Publishing{
|
||||
ContentType: "application/json",
|
||||
Body: []byte(msgBody),
|
||||
},
|
||||
)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func BindQueueToExchange(chn *amqp.Channel, queueName, exchName, routingKey string) error {
|
||||
err := chn.QueueBind(
|
||||
queueName, // queue name
|
||||
routingKey, // routing key
|
||||
exchName, // exchange name
|
||||
false,
|
||||
nil,
|
||||
)
|
||||
if err != nil {
|
||||
log.Printf("Failed to bind a queue: %s\n", queueName)
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user