Files
mq/examples/server.go
2025-09-24 16:19:36 +05:45

58 lines
2.2 KiB
Go

package main
import (
"context"
"time"
"github.com/oarkflow/mq"
"github.com/oarkflow/mq/examples/tasks"
)
func main() {
b := mq.NewBroker(
mq.WithCallback(tasks.Callback),
mq.WithBrokerURL(":8081"),
mq.WithSecurity(true),
// mq.WithMonitoring(true),
// mq.WithAdminAddr(":8080"),
// mq.WithMetricsAddr(":9090"),
)
InitializeDefaults(b.SecurityManager())
// b := mq.NewBroker(mq.WithCallback(tasks.Callback), mq.WithTLS(true, "./certs/server.crt", "./certs/server.key"), mq.WithCAPath("./certs/ca.cert"))
if err := b.InitializeSecurity(); err != nil {
panic(err)
}
b.NewQueue("queue1")
b.NewQueue("queue2")
b.Start(context.Background())
}
// InitializeDefaults adds default permissions, roles, and users for development/testing
func InitializeDefaults(sm *mq.SecurityManager) error {
permissions := []*mq.Permission{
{Name: "task.publish", Resource: "task", Action: "publish", Description: "Publish tasks to queues", CreatedAt: time.Now()},
{Name: "task.consume", Resource: "task", Action: "consume", Description: "Consume tasks from queues", CreatedAt: time.Now()},
{Name: "queue.manage", Resource: "queue", Action: "manage", Description: "Manage queues", CreatedAt: time.Now()},
{Name: "admin.system", Resource: "system", Action: "admin", Description: "System administration", CreatedAt: time.Now()},
}
err := sm.AddPermissions(permissions...)
if err != nil {
return err
}
roles := []*mq.Role{
{Name: "publisher", Description: "Can publish tasks", Permissions: []string{"task.publish"}, CreatedAt: time.Now()},
{Name: "consumer", Description: "Can consume tasks", Permissions: []string{"task.consume"}, CreatedAt: time.Now()},
{Name: "admin", Description: "Full system access", Permissions: []string{"task.publish", "task.consume", "queue.manage", "admin.system"}, CreatedAt: time.Now()},
}
err = sm.AddRoles(roles...)
if err != nil {
return err
}
users := []*mq.User{
{ID: "admin", Username: "admin", Roles: []string{"admin"}, CreatedAt: time.Now(), Password: "admin123"},
{ID: "publisher", Username: "publisher", Roles: []string{"publisher"}, CreatedAt: time.Now(), Password: "pub123"},
{ID: "consumer", Username: "consumer", Roles: []string{"consumer"}, CreatedAt: time.Now(), Password: "con123"},
}
return sm.AddUsers(users...)
}