|
|
package rabbitmq
|
|
|
|
|
|
import (
|
|
|
"time"
|
|
|
)
|
|
|
|
|
|
// PublishOptions are used to control how data is published
|
|
|
type PublishOptions struct {
|
|
|
Exchange string
|
|
|
// Mandatory fails to publish if there are no queues
|
|
|
// bound to the routing key
|
|
|
Mandatory bool
|
|
|
// Immediate fails to publish if there are no consumers
|
|
|
// that can ack bound to the queue on the routing key
|
|
|
Immediate bool
|
|
|
// MIME content type
|
|
|
ContentType string
|
|
|
// Transient (0 or 1) or Persistent (2)
|
|
|
DeliveryMode uint8
|
|
|
// Expiration time in ms that a message will expire from a queue.
|
|
|
// See https://www.rabbitmq.com/ttl.html#per-message-ttl-in-publishers
|
|
|
Expiration string
|
|
|
// MIME content encoding
|
|
|
ContentEncoding string
|
|
|
// 0 to 9
|
|
|
Priority uint8
|
|
|
// correlation identifier
|
|
|
CorrelationID string
|
|
|
// address to to reply to (ex: RPC)
|
|
|
ReplyTo string
|
|
|
// message identifier
|
|
|
MessageID string
|
|
|
// message timestamp
|
|
|
Timestamp time.Time
|
|
|
// message type name
|
|
|
Type string
|
|
|
// creating user id - ex: "guest"
|
|
|
UserID string
|
|
|
// creating application id
|
|
|
AppID string
|
|
|
// Application or exchange specific fields,
|
|
|
// the headers exchange will inspect this field.
|
|
|
Headers Table
|
|
|
}
|
|
|
|
|
|
// WithPublishOptionsExchange returns a function that sets the exchange to publish to
|
|
|
func WithPublishOptionsExchange(exchange string) func(*PublishOptions) {
|
|
|
return func(options *PublishOptions) {
|
|
|
options.Exchange = exchange
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// WithPublishOptionsMandatory makes the publishing mandatory, which means when a queue is not
|
|
|
// bound to the routing key a message will be sent back on the returns channel for you to handle
|
|
|
func WithPublishOptionsMandatory(options *PublishOptions) {
|
|
|
options.Mandatory = true
|
|
|
}
|
|
|
|
|
|
// WithPublishOptionsImmediate makes the publishing immediate, which means when a consumer is not available
|
|
|
// to immediately handle the new message, a message will be sent back on the returns channel for you to handle
|
|
|
func WithPublishOptionsImmediate(options *PublishOptions) {
|
|
|
options.Immediate = true
|
|
|
}
|
|
|
|
|
|
// WithPublishOptionsContentType returns a function that sets the content type, i.e. "application/json"
|
|
|
func WithPublishOptionsContentType(contentType string) func(*PublishOptions) {
|
|
|
return func(options *PublishOptions) {
|
|
|
options.ContentType = contentType
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// WithPublishOptionsPersistentDelivery sets the message to persist. Transient messages will
|
|
|
// not be restored to durable queues, persistent messages will be restored to
|
|
|
// durable queues and lost on non-durable queues during server restart. By default publishings
|
|
|
// are transient
|
|
|
func WithPublishOptionsPersistentDelivery(options *PublishOptions) {
|
|
|
options.DeliveryMode = Persistent
|
|
|
}
|
|
|
|
|
|
// WithPublishOptionsExpiration returns a function that sets the expiry/TTL of a message. As per RabbitMq spec, it must be a
|
|
|
// string value in milliseconds.
|
|
|
func WithPublishOptionsExpiration(expiration string) func(options *PublishOptions) {
|
|
|
return func(options *PublishOptions) {
|
|
|
options.Expiration = expiration
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// WithPublishOptionsHeaders returns a function that sets message header values, i.e. "msg-id"
|
|
|
func WithPublishOptionsHeaders(headers Table) func(*PublishOptions) {
|
|
|
return func(options *PublishOptions) {
|
|
|
options.Headers = headers
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// WithPublishOptionsContentEncoding returns a function that sets the content encoding, i.e. "utf-8"
|
|
|
func WithPublishOptionsContentEncoding(contentEncoding string) func(*PublishOptions) {
|
|
|
return func(options *PublishOptions) {
|
|
|
options.ContentEncoding = contentEncoding
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// WithPublishOptionsPriority returns a function that sets the content priority from 0 to 9
|
|
|
func WithPublishOptionsPriority(priority uint8) func(*PublishOptions) {
|
|
|
return func(options *PublishOptions) {
|
|
|
options.Priority = priority
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// WithPublishOptionsCorrelationID returns a function that sets the content correlation identifier
|
|
|
func WithPublishOptionsCorrelationID(correlationID string) func(*PublishOptions) {
|
|
|
return func(options *PublishOptions) {
|
|
|
options.CorrelationID = correlationID
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// WithPublishOptionsReplyTo returns a function that sets the reply to field
|
|
|
func WithPublishOptionsReplyTo(replyTo string) func(*PublishOptions) {
|
|
|
return func(options *PublishOptions) {
|
|
|
options.ReplyTo = replyTo
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// WithPublishOptionsMessageID returns a function that sets the message identifier
|
|
|
func WithPublishOptionsMessageID(messageID string) func(*PublishOptions) {
|
|
|
return func(options *PublishOptions) {
|
|
|
options.MessageID = messageID
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// WithPublishOptionsTimestamp returns a function that sets the timestamp for the message
|
|
|
func WithPublishOptionsTimestamp(timestamp time.Time) func(*PublishOptions) {
|
|
|
return func(options *PublishOptions) {
|
|
|
options.Timestamp = timestamp
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// WithPublishOptionsType returns a function that sets the message type name
|
|
|
func WithPublishOptionsType(messageType string) func(*PublishOptions) {
|
|
|
return func(options *PublishOptions) {
|
|
|
options.Type = messageType
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// WithPublishOptionsUserID returns a function that sets the user id i.e. "user"
|
|
|
func WithPublishOptionsUserID(userID string) func(*PublishOptions) {
|
|
|
return func(options *PublishOptions) {
|
|
|
options.UserID = userID
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// WithPublishOptionsAppID returns a function that sets the application id
|
|
|
func WithPublishOptionsAppID(appID string) func(*PublishOptions) {
|
|
|
return func(options *PublishOptions) {
|
|
|
options.AppID = appID
|
|
|
}
|
|
|
}
|