handler

package
v1.64.11 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 19, 2026 License: MIT Imports: 5 Imported by: 0

README

Package handler

Пакет handler предоставляет инструменты для обработки сообщений Kafka с поддержкой middleware, управления результатами обработки (коммит/ретрай) и интеграции с метриками/логированием. Предназначен для использования в консумера пакета kafkax.

Types

Sync

Основная структура для синхронной обработки сообщений. Обеспечивает:

  • Применение цепочки middleware
  • Обработку результатов (коммит или повтор)
  • Централизованное логирование ошибок

Methods:

NewSync(logger log.Logger, adapter SyncHandlerAdapter, middlewares ...Middleware) Sync

Конструктор синхронного обработчика, принимающий на вход адаптер бизнес-логики, который должен реализовывать интерфейс SyncHandlerAdapter.

Доступные middleware:

  • Metrics(metricStorage ConsumerMetricStorage) Middleware – сбор метрик времени обработки и размера сообщений, количества коммитов и ретраев.
  • Log(logger log.Logger) Middleware – логирование ключевых событий (успешные коммиты, отправка в ретрай с ошибкой).
  • Recovery() Middleware – предотвращает падение сервиса при панике в обработчике, преобразуя ее в ошибку.
(r Sync) Handle(ctx context.Context, delivery *consumer.Delivery)

Выполняет обработку сообщения. Автоматически:

  • Вызывает цепочку middleware
  • Обрабатывает результат (Commit или Retry)
  • Логирует ошибки коммита

Usage

Default usage flow
package main

import (
	"context"
	"log"
	"time"

	"github.com/txix-open/isp-kit/kafkax/consumer"
	"github.com/txix-open/isp-kit/kafkax/handler"
	log2 "github.com/txix-open/isp-kit/log"
)

func processMessage(msg []byte) error {
	/* put here business logic */
	return nil
}

func noopHandler(ctx context.Context, d *consumer.Delivery) handler.Result {
	err := processMessage(d.Source().Value)
	if err != nil {
		return handler.Retry(5*time.Second, err)
	}
	return handler.Commit()
}

func main() {
	logger, err := log2.New()
	if err != nil {
		log.Fatal(err)
	}

	adapter := handler.SyncHandlerAdapterFunc(noopHandler)
	syncHandler := handler.NewSync(
		logger,
		adapter,
		handler.Log(logger),
	)

	/* handler's call for example */
	delivery := new(consumer.Delivery) /* placeholder for example */
	syncHandler.Handle(context.Background(), delivery)
}

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type ConsumerMetricStorage

type ConsumerMetricStorage interface {
	ObserveConsumeDuration(consumerGroup, topic string, t time.Duration)
	ObserveConsumeMsgSize(consumerGroup, topic string, size int)
	IncCommitCount(consumerGroup, topic string)
	IncRetryCount(consumerGroup, topic string)
}

type Middleware

type Middleware func(next SyncHandlerAdapter) SyncHandlerAdapter

func Log

func Log(logger log.Logger) Middleware

func Metrics

func Metrics(metricStorage ConsumerMetricStorage) Middleware

func Recovery added in v1.53.0

func Recovery() Middleware

nolint:nonamedreturns

type Result

type Result struct {
	Commit     bool
	Retry      bool
	RetryError error
	RetryAfter time.Duration
}

func Commit

func Commit() Result

func Retry

func Retry(after time.Duration, err error) Result

type Sync

type Sync struct {
	// contains filtered or unexported fields
}

func NewSync

func NewSync(logger log.Logger, adapter SyncHandlerAdapter, middlewares ...Middleware) Sync

func (Sync) Handle

func (r Sync) Handle(ctx context.Context, delivery *consumer.Delivery)

type SyncHandlerAdapter

type SyncHandlerAdapter interface {
	Handle(ctx context.Context, delivery *consumer.Delivery) Result
}

type SyncHandlerAdapterFunc

type SyncHandlerAdapterFunc func(ctx context.Context, delivery *consumer.Delivery) Result

func (SyncHandlerAdapterFunc) Handle

func (a SyncHandlerAdapterFunc) Handle(ctx context.Context, delivery *consumer.Delivery) Result

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL