Mainflux.mainflux/consumers/consumer.go

31 lines
1.3 KiB
Go

// Copyright (c) Mainflux
// SPDX-License-Identifier: Apache-2.0
package consumers
import "context"
// AsyncConsumer specifies a non-blocking message-consuming API,
// which can be used for writing data to the DB, publishing messages
// to broker, sending notifications, or any other asynchronous job.
type AsyncConsumer interface {
// ConsumeAsync method is used to asynchronously consume received messages.
ConsumeAsync(ctx context.Context, messages interface{})
// Errors method returns a channel for reading errors which occur during async writes.
// Must be called before performing any writes for errors to be collected.
// The channel is buffered(1) so it allows only 1 error without blocking if not drained.
// The channel may receive nil error to indicate success.
Errors() <-chan error
}
// BlockingConsumer specifies a blocking message-consuming API,
// which can be used for writing data to the DB, publishing messages
// to broker, sending notifications... BlockingConsumer implementations
// might also support concurrent use, but consult implementation for more details.
type BlockingConsumer interface {
// ConsumeBlocking method is used to consume received messages synchronously.
// A non-nil error is returned to indicate operation failure.
ConsumeBlocking(ctx context.Context, messages interface{}) error
}