Skip to content

Commit e39fce9

Browse files
committed
fix: linter
1 parent 7c9662a commit e39fce9

File tree

20 files changed

+130
-152
lines changed

20 files changed

+130
-152
lines changed

.golangci.yaml

Lines changed: 0 additions & 56 deletions
This file was deleted.

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ docker-clean:
5353
lint: $(GOLANGCI) ## Runs golangci-lint with predefined configuration
5454
@echo "Applying linter"
5555
golangci-lint version
56-
golangci-lint run -c .golangci.yaml ./...
56+
golangci-lint run -c .golangci.yml ./...
5757

5858
.PHONY: lint lint-prepare clean build unittest
5959

consumer/service.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package consumer
33
import (
44
"github.com/bxcodec/goqueue/internal/consumer"
55
"github.com/bxcodec/goqueue/internal/consumer/rabbitmq"
6+
_ "github.com/bxcodec/goqueue/internal/shared" // Auto-setup logging
67
"github.com/bxcodec/goqueue/options"
78
consumerOpts "github.com/bxcodec/goqueue/options/consumer"
89
)

encoding.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,11 @@ type DecoderFn func(ctx context.Context, data []byte) (m interfaces.Message, err
2020
var (
2121
// JSONEncoder is an implementation of the EncoderFn interface
2222
// that encodes a Message into JSON format.
23-
JSONEncoder EncoderFn = func(ctx context.Context, m interfaces.Message) (data []byte, err error) {
23+
JSONEncoder EncoderFn = func(_ context.Context, m interfaces.Message) (data []byte, err error) {
2424
return json.Marshal(m)
2525
}
2626
// JSONDecoder is a DecoderFn implementation that decodes JSON data into a Message.
27-
JSONDecoder DecoderFn = func(ctx context.Context, data []byte) (m interfaces.Message, err error) {
27+
JSONDecoder DecoderFn = func(_ context.Context, data []byte) (m interfaces.Message, err error) {
2828
err = json.Unmarshal(data, &m)
2929
return
3030
}
@@ -73,6 +73,7 @@ var (
7373
DefaultEncoding = JSONEncoding
7474
)
7575

76+
//nolint:gochecknoinits // Required for auto-registration of default JSON encoding
7677
func init() {
7778
AddGoQueueEncoding(JSONEncoding.ContentType, JSONEncoding)
7879
}

interfaces/delayfn.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ var (
1818
}
1919

2020
// NoDelayFn is a DelayFn implementation that returns 0 delay for retries.
21-
NoDelayFn DelayFn = func(currenRetries int64) (delay int64) {
21+
NoDelayFn DelayFn = func(_ int64) (delay int64) {
2222
return 0
2323
}
2424
// DefaultDelayFn is the default delay function that will be used if no delay function is provided.

interfaces/inboundmessagehandler.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ type InboundMessage struct {
2222
RetryCount int64 `json:"retryCount"`
2323
// Metadata is the metadata of the message.
2424
// This is set by the library to identify the metadata of the message.
25-
Metadata map[string]interface{} `json:"metadata"`
25+
Metadata map[string]any `json:"metadata"`
2626
// Ack is used for confirming the message. It will drop the message from the queue.
2727
Ack func(ctx context.Context) (err error) `json:"-"`
2828
// Nack is used for rejecting the message. It will requeue the message to be re-delivered again.

interfaces/message.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ type Message struct {
4040
// This is set by the publisher to identify the headers of the message.
4141
// This library will provide extra headers values by default based on the library type.
4242
// Don't use any prefix with :goqueue-, it will conflicted and overrided by the library.
43-
Headers map[string]interface{} `json:"-"`
43+
Headers map[string]any `json:"-"`
4444
// ServiceAgent is the service agent that will be used to publish the message.
4545
// This is set by the publisher to identify the service agent that will be used to publish the message.
4646
// This will be set by the library and override any value

internal/consumer/consumer.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ type Consumer interface {
1313
// Consume consumes messages from the queue and passes them to the provided handler.
1414
// It takes a context, an InboundMessageHandler, and a map of metadata as parameters.
1515
// It returns an error if there was a problem consuming the messages.
16-
Consume(ctx context.Context, handler interfaces.InboundMessageHandler, meta map[string]interface{}) (err error)
16+
Consume(ctx context.Context, handler interfaces.InboundMessageHandler, meta map[string]any) (err error)
1717

1818
// Stop stops the consumer from consuming messages.
1919
// It takes a context as a parameter and returns an error if there was a problem stopping the consumer.

internal/consumer/rabbitmq/blackbox_consumer_test.go

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,13 @@ import (
77
"testing"
88
"time"
99

10+
"github.com/google/uuid"
11+
amqp "github.com/rabbitmq/amqp091-go"
12+
"github.com/rs/zerolog/log"
13+
"github.com/stretchr/testify/assert"
14+
"github.com/stretchr/testify/require"
15+
"github.com/stretchr/testify/suite"
16+
1017
"github.com/bxcodec/goqueue"
1118
headerKey "github.com/bxcodec/goqueue/headers/key"
1219
headerVal "github.com/bxcodec/goqueue/headers/value"
@@ -15,12 +22,6 @@ import (
1522
"github.com/bxcodec/goqueue/middleware"
1623
"github.com/bxcodec/goqueue/options"
1724
consumerOpts "github.com/bxcodec/goqueue/options/consumer"
18-
"github.com/google/uuid"
19-
amqp "github.com/rabbitmq/amqp091-go"
20-
"github.com/rs/zerolog/log"
21-
"github.com/stretchr/testify/assert"
22-
"github.com/stretchr/testify/require"
23-
"github.com/stretchr/testify/suite"
2425
)
2526

2627
const (
@@ -58,7 +59,7 @@ func TestSuiteRabbitMQConsumer(t *testing.T) {
5859
suite.Run(t, rabbitMQTestSuite)
5960
}
6061

61-
func (s *rabbitMQTestSuite) BeforeTest(_, _ string) {
62+
func (*rabbitMQTestSuite) BeforeTest(_, _ string) {
6263
}
6364

6465
func (s *rabbitMQTestSuite) AfterTest(_, _ string) {
@@ -127,11 +128,11 @@ func (s *rabbitMQTestSuite) initQueueForTesting(t *testing.T, exchangePattern ..
127128
}
128129
}
129130

130-
func (s *rabbitMQTestSuite) getMockData(action string) (res interfaces.Message) {
131-
res = interfaces.Message{
131+
func (*rabbitMQTestSuite) getMockData(action string) (res *interfaces.Message) {
132+
res = &interfaces.Message{
132133
Action: action,
133134
Topic: testExchange,
134-
Data: map[string]interface{}{
135+
Data: map[string]any{
135136
"message": "hello-world-test",
136137
},
137138
Timestamp: time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC),
@@ -140,7 +141,7 @@ func (s *rabbitMQTestSuite) getMockData(action string) (res interfaces.Message)
140141
return res
141142
}
142143

143-
func (s *rabbitMQTestSuite) seedPublish(contentType string, action string) {
144+
func (s *rabbitMQTestSuite) seedPublish(contentType, action string) {
144145
mockData := s.getMockData(action)
145146
jsonData, err := json.Marshal(mockData)
146147
s.Require().NoError(err)
@@ -218,16 +219,16 @@ func (s *rabbitMQTestSuite) TestConsumerWithExchangePatternProvided() {
218219
s.Require().NoError(err)
219220
}
220221

221-
func handler(t *testing.T, expected interfaces.Message) interfaces.InboundMessageHandlerFunc {
222+
func handler(t *testing.T, expected *interfaces.Message) interfaces.InboundMessageHandlerFunc {
222223
return func(ctx context.Context, m interfaces.InboundMessage) (err error) {
223224
switch m.ContentType {
224225
case headerVal.ContentTypeText:
225226
assert.Equal(t, expected.Data, m.Data)
226227
case headerVal.ContentTypeJSON:
227-
expectedJSON, err := json.Marshal(expected.Data)
228-
require.NoError(t, err)
229-
actualJSON, err := json.Marshal(m.Data)
230-
require.NoError(t, err)
228+
expectedJSON, marshalErr := json.Marshal(expected.Data)
229+
require.NoError(t, marshalErr)
230+
actualJSON, marshalErr := json.Marshal(m.Data)
231+
require.NoError(t, marshalErr)
231232
assert.JSONEq(t, string(expectedJSON), string(actualJSON))
232233
}
233234

@@ -271,7 +272,7 @@ func (s *rabbitMQTestSuite) TestRequeueWithouthExchangePatternProvided() {
271272
func handlerRequeue(t *testing.T) interfaces.InboundMessageHandlerFunc {
272273
return func(ctx context.Context, m interfaces.InboundMessage) (err error) {
273274
delayFn := func(retries int64) int64 {
274-
assert.Equal(t, int64(m.RetryCount)+1, retries) // because the retry++ is done before this delayfn is called
275+
assert.Equal(t, m.RetryCount+1, retries) // because the retry++ is done before this delayfn is called
275276
return m.RetryCount
276277
}
277278

internal/consumer/rabbitmq/consumer.go

Lines changed: 23 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,15 @@ package rabbitmq
33
import (
44
"context"
55
"encoding/json"
6+
"errors"
67
"fmt"
78
"time"
89

910
"github.com/google/uuid"
1011
amqp "github.com/rabbitmq/amqp091-go"
1112
"github.com/rs/zerolog/log"
1213

13-
"github.com/bxcodec/goqueue/errors"
14+
goqueueErrors "github.com/bxcodec/goqueue/errors"
1415
headerKey "github.com/bxcodec/goqueue/headers/key"
1516
headerVal "github.com/bxcodec/goqueue/headers/value"
1617
"github.com/bxcodec/goqueue/interfaces"
@@ -19,6 +20,11 @@ import (
1920
consumerOpts "github.com/bxcodec/goqueue/options/consumer"
2021
)
2122

23+
const (
24+
// millisecondsMultiplier converts seconds to milliseconds for RabbitMQ expiration
25+
millisecondsMultiplier = 10_000
26+
)
27+
2228
// rabbitMQ is the subscriber handler for rabbitmq
2329
type rabbitMQ struct {
2430
consumerChannel *amqp.Channel
@@ -213,7 +219,8 @@ func (r *rabbitMQ) initRetryModule() {
213219
// It takes a context, an inbound message handler, and a map of metadata as input parameters.
214220
// The function continuously listens for messages from the queue and processes them until the context is canceled.
215221
// If the context is canceled, the function stops consuming messages and returns.
216-
// For each received message, the function builds an inbound message, extracts the retry count, and checks if the maximum retry count has been reached.
222+
// For each received message, the function builds an inbound message, extracts the retry count,
223+
// and checks if the maximum retry count has been reached.
217224
// If the maximum retry count has been reached, the message is moved to the dead letter queue.
218225
// Otherwise, the message is passed to the message handler for processing.
219226
// The message handler is responsible for handling the message and returning an error if any.
@@ -225,7 +232,7 @@ func (r *rabbitMQ) initRetryModule() {
225232
// The function returns an error if any occurred during message handling or if the context was canceled.
226233
func (r *rabbitMQ) Consume(ctx context.Context,
227234
h interfaces.InboundMessageHandler,
228-
meta map[string]interface{}) (err error) {
235+
meta map[string]any) (err error) {
229236
log.Info().
230237
Str("queue_name", r.option.QueueName).
231238
Interface("consumer_meta", meta).
@@ -238,19 +245,19 @@ func (r *rabbitMQ) Consume(ctx context.Context,
238245
Str("queue_name", r.option.QueueName).
239246
Interface("consumer_meta", meta).
240247
Msg("stopping the worker")
241-
return
248+
return err
242249
case receivedMsg, ok := <-r.msgReceiver:
243250
if !ok {
244251
// deliveries channel closed (e.g., due to Stop/Cancel or connection closure)
245252
log.Info().
246253
Str("queue_name", r.option.QueueName).
247254
Interface("consumer_meta", meta).
248255
Msg("message receiver closed, stopping the worker")
249-
return
256+
return err
250257
}
251258
msg, err := buildMessage(meta, receivedMsg)
252259
if err != nil {
253-
if err == errors.ErrInvalidMessageFormat {
260+
if errors.Is(err, goqueueErrors.ErrInvalidMessageFormat) {
254261
nackErr := receivedMsg.Nack(false, false) // nack with requeue false
255262
if nackErr != nil {
256263
log.Error().
@@ -283,7 +290,7 @@ func (r *rabbitMQ) Consume(ctx context.Context,
283290
m := interfaces.InboundMessage{
284291
Message: msg,
285292
RetryCount: retryCount,
286-
Metadata: map[string]interface{}{
293+
Metadata: map[string]any{
287294
"app-id": receivedMsg.AppId,
288295
"consumer-tag": receivedMsg.ConsumerTag,
289296
"content-encoding": receivedMsg.ContentEncoding,
@@ -299,17 +306,17 @@ func (r *rabbitMQ) Consume(ctx context.Context,
299306
"type": receivedMsg.Type,
300307
"user-id": receivedMsg.UserId,
301308
},
302-
Ack: func(ctx context.Context) (err error) {
309+
Ack: func(_ context.Context) (err error) {
303310
err = receivedMsg.Ack(false)
304311
return
305312
},
306-
Nack: func(ctx context.Context) (err error) {
313+
Nack: func(_ context.Context) (err error) {
307314
// receivedMsg.Nack(false, true) => will redelivered again instantly (same with receivedMsg.reject)
308315
// receivedMsg.Nack(false, false) => will put the message to dead letter queue (same with receivedMsg.reject)
309316
err = receivedMsg.Nack(false, true)
310317
return
311318
},
312-
MoveToDeadLetterQueue: func(ctx context.Context) (err error) {
319+
MoveToDeadLetterQueue: func(_ context.Context) (err error) {
313320
// receivedMsg.Nack(false, true) => will redelivered again instantly (same with receivedMsg.reject)
314321
// receivedMsg.Nack(false, false) => will put the message to dead letter queue (same with receivedMsg.reject)
315322
err = receivedMsg.Nack(false, false)
@@ -342,13 +349,13 @@ func (r *rabbitMQ) Consume(ctx context.Context,
342349
}
343350
}
344351

345-
func buildMessage(consumerMeta map[string]interface{}, receivedMsg amqp.Delivery) (msg interfaces.Message, err error) {
352+
func buildMessage(consumerMeta map[string]any, receivedMsg amqp.Delivery) (msg interfaces.Message, err error) {
346353
if len(receivedMsg.Body) == 0 {
347354
log.Error().
348355
Interface("consumer_meta", consumerMeta).
349356
Str("msg", string(receivedMsg.Body)).
350357
Msg("message body is empty, removing the message due to wrong message format")
351-
return msg, errors.ErrInvalidMessageFormat
358+
return msg, goqueueErrors.ErrInvalidMessageFormat
352359
}
353360

354361
err = json.Unmarshal(receivedMsg.Body, &msg)
@@ -358,7 +365,7 @@ func buildMessage(consumerMeta map[string]interface{}, receivedMsg amqp.Delivery
358365
Str("msg", string(receivedMsg.Body)).
359366
Err(err).
360367
Msg("failed to unmarshal the message, removing the message due to wrong message format")
361-
return msg, errors.ErrInvalidMessageFormat
368+
return msg, goqueueErrors.ErrInvalidMessageFormat
362369
}
363370

364371
if msg.ID == "" {
@@ -384,14 +391,14 @@ func buildMessage(consumerMeta map[string]interface{}, receivedMsg amqp.Delivery
384391
Interface("consumer_meta", consumerMeta).
385392
Interface("msg", msg).
386393
Msg("message data is empty, removing the message due to wrong message format")
387-
return msg, errors.ErrInvalidMessageFormat
394+
return msg, goqueueErrors.ErrInvalidMessageFormat
388395
}
389396

390397
msg.SetSchemaVersion(extractHeaderString(receivedMsg.Headers, headerKey.SchemaVer))
391398
return msg, nil
392399
}
393400

394-
func (r *rabbitMQ) requeueMessageWithDLQ(consumerMeta map[string]interface{}, msg interfaces.Message,
401+
func (r *rabbitMQ) requeueMessageWithDLQ(consumerMeta map[string]any, msg interfaces.Message,
395402
receivedMsg amqp.Delivery) func(ctx context.Context, delayFn interfaces.DelayFn) (err error) {
396403
return func(ctx context.Context, delayFn interfaces.DelayFn) (err error) {
397404
if delayFn == nil {
@@ -417,7 +424,7 @@ func (r *rabbitMQ) requeueMessageWithDLQ(consumerMeta map[string]interface{}, ms
417424
Body: receivedMsg.Body,
418425
Timestamp: time.Now(),
419426
AppId: r.tagName,
420-
Expiration: fmt.Sprintf("%d", delayInSeconds*10000),
427+
Expiration: fmt.Sprintf("%d", delayInSeconds*millisecondsMultiplier),
421428
},
422429
)
423430

0 commit comments

Comments
 (0)