chore: import upstream snapshot with attribution
govulncheck / govulncheck (push) Has been cancelled
Lint / golangci-lint (push) Has been cancelled
Run Tests / Unit Tests (push) Has been cancelled
Run Tests / Etcd Integration Tests (push) Has been cancelled
Harness (E2E) / Harnesses (mock LLM) (push) Has been cancelled
Harness (E2E) / Provider harnesses (live LLM conformance) (push) Has been cancelled
govulncheck / govulncheck (push) Has been cancelled
Lint / golangci-lint (push) Has been cancelled
Run Tests / Unit Tests (push) Has been cancelled
Run Tests / Etcd Integration Tests (push) Has been cancelled
Harness (E2E) / Harnesses (mock LLM) (push) Has been cancelled
Harness (E2E) / Provider harnesses (live LLM conformance) (push) Has been cancelled
This commit is contained in:
@@ -0,0 +1,184 @@
|
||||
package template
|
||||
|
||||
var (
|
||||
PubsubProtoSRV = `syntax = "proto3";
|
||||
|
||||
package {{dehyphen .Alias}};
|
||||
|
||||
option go_package = "./proto;{{dehyphen .Alias}}";
|
||||
|
||||
service {{title .Alias}} {
|
||||
rpc Publish(PublishRequest) returns (PublishResponse) {}
|
||||
rpc Stats(StatsRequest) returns (StatsResponse) {}
|
||||
}
|
||||
|
||||
message Event {
|
||||
string id = 1;
|
||||
string type = 2;
|
||||
string source = 3;
|
||||
string data = 4;
|
||||
int64 timestamp = 5;
|
||||
}
|
||||
|
||||
message PublishRequest {
|
||||
string type = 1;
|
||||
string data = 2;
|
||||
}
|
||||
|
||||
message PublishResponse {
|
||||
string id = 1;
|
||||
}
|
||||
|
||||
message StatsRequest {}
|
||||
|
||||
message StatsResponse {
|
||||
int64 published = 1;
|
||||
int64 received = 2;
|
||||
}
|
||||
`
|
||||
|
||||
PubsubHandlerSRV = `package handler
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"sync/atomic"
|
||||
"time"
|
||||
|
||||
"github.com/google/uuid"
|
||||
"go-micro.dev/v6/broker"
|
||||
log "go-micro.dev/v6/logger"
|
||||
|
||||
pb "{{.Dir}}/proto"
|
||||
)
|
||||
|
||||
const Topic = "{{lower .Alias}}.events"
|
||||
|
||||
type {{title .Alias}} struct {
|
||||
broker broker.Broker
|
||||
published atomic.Int64
|
||||
received atomic.Int64
|
||||
}
|
||||
|
||||
func New(b broker.Broker) *{{title .Alias}} {
|
||||
return &{{title .Alias}}{broker: b}
|
||||
}
|
||||
|
||||
// Publish sends an event to the message broker.
|
||||
//
|
||||
// @example {"type": "user.created", "data": "{\"id\": \"123\", \"name\": \"Alice\"}"}
|
||||
func (h *{{title .Alias}}) Publish(ctx context.Context, req *pb.PublishRequest, rsp *pb.PublishResponse) error {
|
||||
event := &pb.Event{
|
||||
Id: uuid.New().String(),
|
||||
Type: req.Type,
|
||||
Source: "{{lower .Alias}}",
|
||||
Data: req.Data,
|
||||
Timestamp: time.Now().Unix(),
|
||||
}
|
||||
|
||||
body, err := json.Marshal(event)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if err := h.broker.Publish(Topic, &broker.Message{Body: body}); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
h.published.Add(1)
|
||||
log.Infof("Published event %s type=%s", event.Id, event.Type)
|
||||
|
||||
rsp.Id = event.Id
|
||||
return nil
|
||||
}
|
||||
|
||||
// Stats returns the number of events published and received.
|
||||
//
|
||||
// @example {}
|
||||
func (h *{{title .Alias}}) Stats(ctx context.Context, req *pb.StatsRequest, rsp *pb.StatsResponse) error {
|
||||
rsp.Published = h.published.Load()
|
||||
rsp.Received = h.received.Load()
|
||||
return nil
|
||||
}
|
||||
|
||||
// Subscribe sets up a subscription to the event topic. Call this
|
||||
// after the service has started.
|
||||
func (h *{{title .Alias}}) Subscribe() error {
|
||||
_, err := h.broker.Subscribe(Topic, func(p broker.Event) error {
|
||||
h.received.Add(1)
|
||||
|
||||
var event pb.Event
|
||||
if err := json.Unmarshal(p.Message().Body, &event); err != nil {
|
||||
log.Errorf("Failed to unmarshal event: %v", err)
|
||||
return nil
|
||||
}
|
||||
|
||||
log.Infof("Received event %s type=%s data=%s", event.Id, event.Type, event.Data)
|
||||
return nil
|
||||
})
|
||||
return err
|
||||
}
|
||||
`
|
||||
|
||||
PubsubMainSRV = `package main
|
||||
|
||||
import (
|
||||
"{{.Dir}}/handler"
|
||||
pb "{{.Dir}}/proto"
|
||||
|
||||
"go-micro.dev/v6"
|
||||
"go-micro.dev/v6/gateway/mcp"
|
||||
log "go-micro.dev/v6/logger"
|
||||
)
|
||||
|
||||
func main() {
|
||||
service := micro.NewService("{{lower .Alias}}",
|
||||
mcp.WithMCP(":3001"),
|
||||
)
|
||||
|
||||
service.Init()
|
||||
|
||||
h := handler.New(service.Options().Broker)
|
||||
pb.Register{{title .Alias}}Handler(service.Server(), h)
|
||||
|
||||
// Subscribe to events after service starts
|
||||
go func() {
|
||||
if err := h.Subscribe(); err != nil {
|
||||
log.Fatalf("Failed to subscribe: %v", err)
|
||||
}
|
||||
log.Info("Subscribed to ", handler.Topic)
|
||||
}()
|
||||
|
||||
service.Run()
|
||||
}
|
||||
`
|
||||
|
||||
PubsubMainSRVNoMCP = `package main
|
||||
|
||||
import (
|
||||
"{{.Dir}}/handler"
|
||||
pb "{{.Dir}}/proto"
|
||||
|
||||
"go-micro.dev/v6"
|
||||
log "go-micro.dev/v6/logger"
|
||||
)
|
||||
|
||||
func main() {
|
||||
service := micro.NewService("{{lower .Alias}}")
|
||||
|
||||
service.Init()
|
||||
|
||||
h := handler.New(service.Options().Broker)
|
||||
pb.Register{{title .Alias}}Handler(service.Server(), h)
|
||||
|
||||
go func() {
|
||||
if err := h.Subscribe(); err != nil {
|
||||
log.Fatalf("Failed to subscribe: %v", err)
|
||||
}
|
||||
log.Info("Subscribed to ", handler.Topic)
|
||||
}()
|
||||
|
||||
service.Run()
|
||||
}
|
||||
`
|
||||
)
|
||||
Reference in New Issue
Block a user