Toolbox on Golang to manipulate messages from amqp broker
Listen HTTP endpoint and post message to AMQP broker. Message must be as described below.
Auth included =)
Gets message from AMQP broker and post to remote HTTP endpoint. If no --template
provided raw JSON view of message is used.
Retries/multiple URLs/auth included =)
Same as amqp-http-input but puts message into CSV (I don't remember why I did it).
Auth included =)
Runs provided executable and puts into stdin content of message. Headers are putted
into environment variables (as in message described: e.x. ContentType
).
Additional headers from message are putted with prefix AMQP_
. For example: AMQP_MY_HEADER
Stdout sended as message to ReplyTo
queue (if provided) with CorrelationId
= MessageId
Retries included =)
Very simple utility that writes lines from stdin as messages to amqp broker or whole
data as one packet if --single
flag provided
Use binary builds or build by yourself:
Assume that you defined GOPATH/bin
into PATH
go install github.com/reddec/amqp-utils/cmd/...
Also you may setup a service like this:
[Unit]
Description=AMQP utils - pull messages from broker and push to HTTP endpoint
[Service]
ExecStart=/usr/local/bin/amqp-http-hook
RestartSec=5s
[Install]
WantedBy=multi-user.target
Just replace Description
and ExecStart
to description of service and absolute
path to required executable.
Install service by those command:
systemctl enable /path/to/file.service
And start by
systemctl start file.service
At fact, this is simple web hook, backed by AMQP broker
You may send message no in JSON by using Golang template: flag --template <filename>
Possible values in template is same as message fields
I am too lazy to describe all fields, so
type Message struct {
Headers map[string]interface{} `json:"headers,omitempty"`
Body string `json:"body"`
ContentType string `json:"content_type,omitempty"` // MIME content type
ContentEncoding string `json:"content_encoding,omitempty"` // MIME content encoding
DeliveryMode uint8 `json:"delivery_mode,omitempty"` // queue implemention use - non-persistent (1) or persistent (2)
Priority uint8 `json:"priority,omitempty"` // queue implementation use - 0 to 9
CorrelationId string `json:"correlation_id,omitempty"` // application use - correlation identifier
ReplyTo string `json:"reply_to,omitempty"` // application use - address to to reply to (ex: RPC)
Expiration string `json:"expiration,omitempty"` // implementation use - message expiration spec
MessageId string `json:"message_id,omitempty"` // application use - message identifier
Timestamp time.Time `json:"timestamp,omitempty"` // application use - message timestamp
Type string `json:"type,omitempty"` // application use - message type name
Exchange string `json:"exchange,omitempty"` // basic.publish exhange
RoutingKey string `json:"routing_key,omitempty"` // basic.publish routing key
}