machinery-plugins/README.md

60 lines
2.0 KiB
Markdown
Raw Normal View History

2024-05-19 12:39:45 +00:00
# machinery-plugins
This project is intended to provide multi broker, lock, backend for the [RichardKnop/machinery](https://github.com/RichardKnop/machinery) library. About
Machinery is an asynchronous task queue/job queue based on distributed message passing. This plugins library offers additional functionalities and tools to help you better utilize and customize Machinery.
## Features
This library provides the following features:
- `Brokers`: add etcd / mysql
- `Locks` add etcd / mysql
- `Backends`: add etcd / mysql
you can combine whatever you want
## Quick Start
Install the library:
```
2024-06-01 03:35:00 +00:00
go get git.ifooth.com/common/machinery-plugins@latest
2024-05-19 12:39:45 +00:00
```
Import the library in your code and use it to create tasks:
```go
import (
"github.com/RichardKnop/machinery/v2"
redisbackend "github.com/RichardKnop/machinery/v2/backends/redis"
eagerlock "github.com/RichardKnop/machinery/v2/locks/eager"
2024-06-01 03:35:00 +00:00
etcdbroker "git.ifooth.com/common/machinery-plugins/brokers/etcd"
2024-05-19 12:39:45 +00:00
)
func main() {
// Create server instance
// broker := redisbroker.NewGR(cnf, []string{"localhost:6379"}, 1)
broker, err := etcdbroker.New(cnf, "http://127.0.0.1:2379")
if err != nil {
return nil, err
}
lock := eagerlock.New()
backend := redisbackend.NewGR(cnf, []string{"localhost:6379"}, 3)
server := machinery.NewServer(cnf, broker, backend, lock)
}
```
## Contributing
We welcome contributions in any form! If you have any issues, suggestions, or wish to add new features, let us know by creating an issue or pull request.
## License
2024-06-07 15:51:24 +00:00
machinery-plugins is based on the Apache 2.0 protocol. Please refer to [LICENSE](./LICENSE) for details.
## 设计
push -> pending_tasks/{queue}/{task_uuid}
2024-06-07 23:55:03 +00:00
handle -> 获取keys-only, 判断是否有consumerlist/watch(可用key列表) -> 原子操作 -> handler -> delete(每次全量key N可以对吧lock)
2024-06-07 15:51:24 +00:00
delay -> delay_tasks/r{xx}-taskuuid
handlr -> 按key排序获取最新的一个(可以大于当前时间) -> 原子put/delete操作 -> done (性能没有问题, 多个服务会有冲突,最多N-1可以对比Lock)