1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/gojuukaze-YTask

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

YTask — это асинхронная система задач для распределённого выполнения работ на Go

Установка

# установите основной пакет
go get -u github.com/gojuukaze/YTask/v3

# установите брокеры и бэкэнды
go get -u github.com/gojuukaze/YTask/drives/redis/v3
go get -u github.com/gojuukaze/YTask/drives/rabbitmq/v3
go get -u github.com/gojuukaze/YTask/drives/mongo2/v3
go get -u github.com/gojuukaze/YTask/drives/memcache/v3

Архитектурная схема

architecture_diagram

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

Пример сервера

package main

import (
	"context"
	"os"
	"os/signal"
	"syscall"
	"github.com/gojuukaze/YTask/drives/redis/v3"
	"github.com/gojuukaze/YTask/v3"
)

// Определяем две задачи.
// Параметры задач и возвращаемые значения поддерживают все типы данных, которые могут быть сериализованы в JSON.

func add(a int, b int) int {
	return a + b
}

type User struct {
	Id   int
	Name string
}

func appendUser(user User, ids []int, names []string) []User {
	var r = make([]User, 0)
	r = append(r, user)
	for i := range ids {
		r = append(r, User{ids[i], names[i]})
	}
	return r
}
``````go
func main() {
    // The last parameter of RedisBroker represents the size of the connection pool. If you do not require a worker process, you can set it to 0 (the default value is 0, and the server-side default value is 3).
    // Otherwise, set it as needed; the maximum value should not exceed the number of tasks running simultaneously.
    broker := redis.NewRedisBroker("127.0.0.1", "6379", "", 0, 3)
}
```	// Последний параметр RedisBackend — размер пула соединений. Для серверной части, если <=0, используется значение по умолчанию.
	// Значение по умолчанию равно min(10, numWorkers)
	backend := redis.NewRedisBackend("127.0.0.1", "6379", "", 0, 0)

	ser := ytask.Server.NewServer(
		ytask.Config.Broker(&broker),
		ytask.Config.Backend(&backend), // Может быть не установлен
		ytask.Config.Debug(true),
		ytask.Config.StatusExpires(60 * 5),
		ytask.Config.ResultExpires(60 * 5),
	)
``````md
## Пример сервера

```go
    // Регистрация задачи
    ser.Add("group1", "add", add)
    ser.Add("group1", "append_user", appendUser)

    // Запуск сервера с уровнем параллелизма равным 3
    ser.Run("group1", 3)

    quit := make(chan os.Signal, 1)

    signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM)
    <-quit
    ser.Shutdown(context.Background())
}

Пример клиента

package main

import (
	"fmt"
	"github.com/gojuukaze/YTask/drives/redis/v3"
	"github.com/gojuukaze/YTask/v3"
	"github.com/gojuukaze/YTask/v3/server"
	"time"
)

type User struct {
	Id   int
	Name string
}

var client server.Client

func main() {
	// Для клиентской стороны требуется установка размера пула соединений
	broker := redis.NewRedisBroker("127.0.0.1", "6379", "", 0, 5)
	backend := redis.NewRedisBackend("127.0.0.1", "6379", "", 0, 5)

	ser := ytask.Server.NewServer(
		ytask.Config.Broker(&broker),
		ytask.Config.Backend(&backend),
		ytask.Config.Debug(true),
		ytask.Config.StatusExpires(60 * 5),
		ytask.Config.ResultExpires(60 * 5),
	)

	client = ser.GetClient()

	// Отправка задачи
	taskId, _ := client.Send("group1", "add", 123, 44)
	// Получение результата
	result, _ := client.GetResult(taskId, 2*time.Second, 300*time.Millisecond)

	if result.IsSuccess() {
		// Есть несколько способов получения возвращаемого значения, подробнее см. документацию
		sum, _ := result.GetInt64(0)
		// или
		var sum2 int
		result.Get(0, &sum2)
}		fmt.Println("add(123,44) =", int(sum))
	}

	// Отправка структур, массивов и т.д.
	taskId, _ = client.Send("group1", "append_user", User{1, "aa"}, []int{322, 11}, []string{"bb", "cc"})
	result, _ = client.GetResult(taskId, 2*time.Second, 300*time.Millisecond)
	var users []User
	result.Get(0, &users)
	fmt.Println(users)
}

Пример

Также обратите внимание на директорию пример.

cd example/server
go run main.go 

cd example/send
go run send/main.go

Донат / Поддержка

Открытое программное обеспечение — это сложная работа, если вам понравилось данное решение, пожалуйста, сделайте небольшой донат.


Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

YTask — это асинхронная очередь задач для обработки распределённых заданий в golang. Развернуть Свернуть
GPL-3.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/gojuukaze-YTask.git
git@api.gitlife.ru:oschina-mirror/gojuukaze-YTask.git
oschina-mirror
gojuukaze-YTask
gojuukaze-YTask
master