Documentation
¶
Overview ¶
Package common - common utility structs and functions
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func BuildIPCMessageBufferQueueName ¶
BuildIPCMessageBufferQueueName helper function to build IPC reader buffer queue name
func BuildIPCMessageQueueName ¶
BuildIPCMessageQueueName helper function to build IPC queue name
Types ¶
type IPCMessageReceive ¶
type IPCMessageReceive interface {
/*
DequeueMessage dequeue message from main queue.
The message will staged on the buffer queue.
@param ctx context.Context - execution context
@param blocking bool - whether this is a blocking operation
@param maxWait *time.Duration - if blocking, the max duration. Default 5 sec.
@return message from main queue, or nil if queue empty
*/
DequeueMessage(
ctx context.Context, blocking bool, maxWait *time.Duration,
) (goutilsRedis.QueueMessageEnvelope, error)
/*
DequeueBufferedMessage dequeue message from buffer queue.
@param ctx context.Context - execution context
@param blocking bool - whether this is a blocking operation
@param maxWait *time.Duration - if blocking, the max duration. Default 5 sec.
@return message from buffer queue, or nil if queue empty
*/
DequeueBufferedMessage(
ctx context.Context, blocking bool, maxWait *time.Duration,
) (goutilsRedis.QueueMessageEnvelope, error)
/*
DeleteBufferedMessage delete from buffer queue.
@param ctx context.Context - execution context
@param msg goutilsRedis.QueueMessageEnvelope - the message to delete
*/
DeleteBufferedMessage(ctx context.Context, msg goutilsRedis.QueueMessageEnvelope) error
/*
ReEnqueueOnMainQueue re-enqueue message on main queue.
The message will be deleted from the buffer queue.
@param ctx context.Context - execution context
@param msg goutilsRedis.QueueMessageEnvelope - the message to enqueue
*/
ReEnqueueOnMainQueue(
ctx context.Context, msg goutilsRedis.QueueMessageEnvelope,
) error
}
IPCMessageReceive client for receiving message on a queue
func NewRedisIPCMessageReceive ¶
func NewRedisIPCMessageReceive( ctx context.Context, queueName string, redis goutilsRedis.Client, reader string, ) (IPCMessageReceive, error)
NewRedisIPCMessageReceive define a new IPC message receiver for a REDIS queue
The intended usage case of the receive is:
- Move a message from the main queue to the reader buffer queue
- Subscriber verify they can take ownership of message
- If yes, process the message, then delete from the reader buffer queue.
- If no, move the message back to the main queue.
Each reader must have exclusive ownership of it's own buffer queue.
On initialization, reader process any existing messages in the buffer queue. For each existing message in the buffer queue:
- Subscriber verify its ownership of message
- If yes, process the message.
- If no, move the message back to the main queue.
At application start
@param ctx context.Context - execution context @param queueName string - read message from queue @param redis goutilsRedis.Client - REDIS client @param reader string - queue reader name @returns new receiver
type IPCMessageSend ¶
type IPCMessageSend interface {
/*
EnqueueMessage enqueue message on queue
@param ctx context.Context - execution context
@param msg goutilsRedis.QueueMessageEnvelope - the message to enqueue
*/
EnqueueMessage(
ctx context.Context, msg goutilsRedis.QueueMessageEnvelope,
) error
}
IPCMessageSend client for sending message on a queue
func NewRedisIPCMessageSend ¶
func NewRedisIPCMessageSend( ctx context.Context, queueName string, redis goutilsRedis.Client, sender string, ) (IPCMessageSend, error)
NewRedisIPCMessageSend define a new IPC message sender for a REDIS queue
@param ctx context.Context - execution context @param queueName string - write messages to queue @param redis goutilsRedis.Client - REDIS client @param sender string - queue sender name @returns new sender