50 lines
911 B
Go
50 lines
911 B
Go
package rabbitmq
|
|
|
|
import (
|
|
"smpp-transmitter/pkg/mq"
|
|
|
|
"github.com/streadway/amqp"
|
|
)
|
|
|
|
type rabbitMQConnection struct {
|
|
conn *amqp.Connection
|
|
url string
|
|
}
|
|
|
|
func NewRabbitMQConnection(url string) mq.Connection {
|
|
return &rabbitMQConnection{url: url}
|
|
}
|
|
|
|
func (r *rabbitMQConnection) Connect() error {
|
|
var err error
|
|
r.conn, err = amqp.Dial(r.url)
|
|
return err
|
|
}
|
|
|
|
func (r *rabbitMQConnection) Close() error {
|
|
return r.conn.Close()
|
|
}
|
|
|
|
func (r *rabbitMQConnection) Channel() (mq.Channel, error) {
|
|
ch, err := r.conn.Channel()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return &rabbitMQChannel{ch: ch}, nil
|
|
}
|
|
|
|
func (r *rabbitMQConnection) NotifyClose(c chan *mq.Error) chan *mq.Error {
|
|
ch := r.conn.NotifyClose(make(chan *amqp.Error))
|
|
go func() {
|
|
for err := range ch {
|
|
c <- &mq.Error{
|
|
Code: err.Code,
|
|
Reason: err.Reason,
|
|
Server: err.Server,
|
|
Recover: err.Recover,
|
|
}
|
|
}
|
|
}()
|
|
return c
|
|
}
|