micro/transport/rabbitmq/channel.go

128 lines
2.4 KiB
Go
Raw Normal View History

package rabbitmq
2015-05-21 00:57:19 +03:00
//
// All credit to Mondo
//
import (
"errors"
"github.com/nu7hatch/gouuid"
"github.com/streadway/amqp"
)
2015-05-21 23:08:19 +03:00
type rabbitMQChannel struct {
2015-05-21 00:57:19 +03:00
uuid string
connection *amqp.Connection
channel *amqp.Channel
}
2015-05-21 23:08:19 +03:00
func newRabbitChannel(conn *amqp.Connection) (*rabbitMQChannel, error) {
2015-05-21 00:57:19 +03:00
id, err := uuid.NewV4()
if err != nil {
return nil, err
}
2015-05-21 23:08:19 +03:00
rabbitCh := &rabbitMQChannel{
2015-05-21 00:57:19 +03:00
uuid: id.String(),
connection: conn,
}
if err := rabbitCh.Connect(); err != nil {
return nil, err
}
return rabbitCh, nil
}
2015-05-21 23:08:19 +03:00
func (r *rabbitMQChannel) Connect() error {
2015-05-21 00:57:19 +03:00
var err error
r.channel, err = r.connection.Channel()
if err != nil {
return err
}
return nil
}
2015-05-21 23:08:19 +03:00
func (r *rabbitMQChannel) Close() error {
2015-05-21 00:57:19 +03:00
if r.channel == nil {
return errors.New("Channel is nil")
}
return r.channel.Close()
}
2015-05-21 23:08:19 +03:00
func (r *rabbitMQChannel) Publish(exchange, key string, message amqp.Publishing) error {
2015-05-21 00:57:19 +03:00
if r.channel == nil {
return errors.New("Channel is nil")
}
2015-05-21 21:24:57 +03:00
return r.channel.Publish(exchange, key, false, false, message)
2015-05-21 00:57:19 +03:00
}
2015-05-21 23:08:19 +03:00
func (r *rabbitMQChannel) DeclareExchange(exchange string) error {
2015-05-21 00:57:19 +03:00
return r.channel.ExchangeDeclare(
exchange, // name
"topic", // kind
false, // durable
false, // autoDelete
false, // internal
false, // noWait
nil, // args
)
}
2015-05-21 23:08:19 +03:00
func (r *rabbitMQChannel) DeclareQueue(queue string) error {
2015-05-21 00:57:19 +03:00
_, err := r.channel.QueueDeclare(
queue, // name
false, // durable
true, // autoDelete
false, // exclusive
false, // noWait
nil, // args
)
return err
}
2015-05-21 23:08:19 +03:00
func (r *rabbitMQChannel) DeclareDurableQueue(queue string) error {
2015-05-21 00:57:19 +03:00
_, err := r.channel.QueueDeclare(
queue, // name
true, // durable
false, // autoDelete
false, // exclusive
false, // noWait
nil, // args
)
return err
}
2015-05-21 23:08:19 +03:00
func (r *rabbitMQChannel) DeclareReplyQueue(queue string) error {
2015-05-21 00:57:19 +03:00
_, err := r.channel.QueueDeclare(
queue, // name
false, // durable
true, // autoDelete
true, // exclusive
false, // noWait
nil, // args
)
return err
}
2015-05-21 23:08:19 +03:00
func (r *rabbitMQChannel) ConsumeQueue(queue string) (<-chan amqp.Delivery, error) {
2015-05-21 00:57:19 +03:00
return r.channel.Consume(
queue, // queue
r.uuid, // consumer
true, // autoAck
false, // exclusive
false, // nolocal
false, // nowait
nil, // args
)
}
2015-05-21 23:08:19 +03:00
func (r *rabbitMQChannel) BindQueue(queue, exchange string) error {
2015-05-21 00:57:19 +03:00
return r.channel.QueueBind(
queue, // name
queue, // key
exchange, // exchange
false, // noWait
nil, // args
)
}