subpub

package module
v0.0.0-...-5adc2d3 Latest Latest
Warning

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

Go to latest
Published: May 11, 2025 License: MIT Imports: 4 Imported by: 0

README

SubPub - Реализация шаблона Publisher-Subscriber на Go

Go Лицензия Go Report Card Coverage Status

SubPub - это легковесная, потокобезопасная реализация шаблона Publisher-Subscriber на языке Go, предназначенная для эффективного распределения сообщений между компонентами системы.

Особенности

  • 🚀 Асинхронная доставка - Подписчики не блокируют издателей
  • 🔒 Потокобезопасность - Безопасное использование из множества горутин
  • ⏱️ Грациозное завершение - Поддержка контекста для управления shutdown
  • 🏎 Высокая производительность - Оптимизировано для минимальных задержек
  • Простой API - Легкая интеграция в существующие проекты
  • 🧪 Полное тестирование - Комплексное покрытие тестами

Установка

go get github.com/Alexandr-Fox/subpub

Быстрый старт

package main

import (
	"context"
	"fmt"
	"github.com/Alexandr-Fox/subpub"
	"time"
)

func main() {
	// Создаем экземпляр SubPub
	bus := subpub.NewSubPub()

	// Подписываемся на тему
	sub, err := bus.Subscribe("новости", func(msg interface{}) {
		fmt.Printf("Получены новости: %v\n", msg)
	})
	if err != nil {
		panic(err)
	}
	defer sub.Unsubscribe()

	// Публикуем сообщение
	err = bus.Publish("новости", "Срочно: Вышел Go 2.0!")
	if err != nil {
		panic(err)
	}

	// Даем время на обработку
	time.Sleep(100 * time.Millisecond)

	// Грациозное завершение
	ctx, cancel := context.WithTimeout(context.Background(), 1*time.Second)
	defer cancel()
	bus.Close(ctx)
}

Справочник API

NewSubPub() SubPub

Создает новый экземпляр SubPub.

Subscribe(тема string, обработчик MessageHandler) (Subscription, error)

Подписывается на сообщения указанной темы. Функция-обработчик будет вызываться для каждого опубликованного сообщения.

Publish(тема string, сообщение interface{}) error

Публикует сообщение для всех подписчиков указанной темы.

Close(ctx context.Context) error

Грациозно завершает работу, ожидая обработки всех сообщений или отмены контекста.

Unsubscribe()

Отменяет подписку.

Примеры использования

  • Событийно-ориентированная архитектура
  • Общение между микросервисами
  • Системы реального времени
  • Распределение логов
  • Взаимодействие слабосвязанных компонентов

Лицензия

Проект распространяется под лицензией MIT - подробности в файле LICENSE.


✨ Эффективный обмен сообщениями для Go-приложений ✨

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type MessageHandler

type MessageHandler func(msg interface{})

MessageHandler is a callback function that processes messages delivered to subscribers.

type SubPub

type SubPub interface {
	// Subscribe creates an asynchronous queue subscriber on the given subject.
	Subscribe(subject string, cb MessageHandler) (Subscription, error)
	// Publish publishes the msg argument to the given subject.
	Publish(subject string, msg interface{}) error
	// Close will shutdown sub-pub system.
	// May be blocked by data delivery until the context is canceled.
	Close(ctx context.Context) error
}

func NewSubPub

func NewSubPub() SubPub

type Subscription

type Subscription interface {
	// Unsubscribe will remove interest in the current subject subscription is for.
	Unsubscribe()
}

Jump to

Keyboard shortcuts

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