forked from kuznetsovin/egts-protocol
-
Notifications
You must be signed in to change notification settings - Fork 3
/
rabbitmq.go
91 lines (77 loc) · 2.07 KB
/
rabbitmq.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
package main
/*
Плагин для работы с RabbitMQ через amqp.
Раздел настроек, которые должны отвечать в конфиге для подключения плагина:
[store]
plugin = "rabbitmq.so"
host = "localhost"
port = "5672"
user = "guest"
password = "guest"
exchange = "receiver"
exchange_type = "topic"
*/
import (
"fmt"
"github.com/streadway/amqp"
)
type RabbitMQConnector struct {
connection *amqp.Connection
channel *amqp.Channel
config map[string]string
}
func (c *RabbitMQConnector) Init(cfg map[string]string) error {
var (
err error
)
if cfg == nil {
return fmt.Errorf("Не корректная ссылка на конфигурацию")
}
c.config = cfg
conStr := fmt.Sprintf("amqp://%s:%s@%s:%s/", c.config["user"], c.config["password"], c.config["host"], c.config["port"])
if c.connection, err = amqp.Dial(conStr); err != nil {
return fmt.Errorf("Ошибка установки соединеия RabbitMQ: %v", err)
}
if c.channel, err = c.connection.Channel(); err != nil {
return fmt.Errorf("Ошибка открытия канала RabbitMQ: %v", err)
}
return err
}
func (c *RabbitMQConnector) Save(msg interface{ ToBytes() ([]byte, error) }) error {
if msg == nil {
return fmt.Errorf("Не корректная ссылка на пакет")
}
innerPkg, err := msg.ToBytes()
if err != nil {
return fmt.Errorf("Ошибка сериализации пакета: %v", err)
}
if err = c.channel.Publish(
c.config["exchange"],
c.config["key"],
false,
false,
amqp.Publishing{
ContentType: "text/plain",
Body: innerPkg,
}); err != nil {
return fmt.Errorf("Ошибка отправки сырого пакета в RabbitMQ: %v", err)
}
return nil
}
func (c *RabbitMQConnector) Close() error {
var err error
if c != nil {
if c.channel != nil {
if err = c.channel.Close(); err != nil {
return err
}
}
if c.connection != nil {
if err = c.connection.Close(); err != nil {
return err
}
}
}
return err
}
var Connector RabbitMQConnector