@@ -30,30 +30,15 @@ import (
3030 "github.com/google/uuid"
3131 eb "github.com/linkall-labs/vanus/client"
3232 "github.com/linkall-labs/vanus/client/pkg/api"
33+ "github.com/linkall-labs/vanus/internal/gateway/proxy"
3334 "github.com/linkall-labs/vanus/internal/primitive"
3435 "github.com/linkall-labs/vanus/observability/log"
3536 "github.com/linkall-labs/vanus/observability/tracing"
3637 "go.opentelemetry.io/otel/trace"
3738)
3839
3940const (
40- httpRequestPrefix = "/gateway"
41- ctrlProxyPortShift = 2
42- )
43-
44- var (
45- allowCtrlProxyList = map [string ]string {
46- "/linkall.vanus.controller.PingServer/Ping" : "ALLOW" ,
47- "/linkall.vanus.controller.EventBusController/ListEventBus" : "ALLOW" ,
48- "/linkall.vanus.controller.EventBusController/CreateEventBus" : "ALLOW" ,
49- "/linkall.vanus.controller.EventBusController/DeleteEventBus" : "ALLOW" ,
50- "/linkall.vanus.controller.EventBusController/GetEventBus" : "ALLOW" ,
51- "/linkall.vanus.controller.EventLogController/ListSegment" : "ALLOW" ,
52- "/linkall.vanus.controller.TriggerController/CreateSubscription" : "ALLOW" ,
53- "/linkall.vanus.controller.TriggerController/DeleteSubscription" : "ALLOW" ,
54- "/linkall.vanus.controller.TriggerController/GetSubscription" : "ALLOW" ,
55- "/linkall.vanus.controller.TriggerController/ListSubscription" : "ALLOW" ,
56- }
41+ httpRequestPrefix = "/gateway"
5742)
5843
5944var (
@@ -67,28 +52,44 @@ type EventData struct {
6752
6853type ceGateway struct {
6954 // ceClient v2.Client
70- busWriter sync.Map
71- config Config
72- client eb.Client
73- cp * ctrlProxy
74- tracer * tracing.Tracer
55+ busWriter sync.Map
56+ config Config
57+ client eb.Client
58+ proxySrv * proxy.ControllerProxy
59+ tracer * tracing.Tracer
60+ ceListener net.Listener
7561}
7662
7763func NewGateway (config Config ) * ceGateway {
7864 return & ceGateway {
79- config : config ,
80- client : eb .Connect (config .ControllerAddr ),
81- cp : newCtrlProxy (config .Port + ctrlProxyPortShift , allowCtrlProxyList , config . ControllerAddr ),
82- tracer : tracing .NewTracer ("cloudevents" , trace .SpanKindServer ),
65+ config : config ,
66+ client : eb .Connect (config .ControllerAddr ),
67+ proxySrv : proxy . NewControllerProxy (config .GetProxyConfig () ),
68+ tracer : tracing .NewTracer ("cloudevents" , trace .SpanKindServer ),
8369 }
8470}
8571
86- func (ga * ceGateway ) StartCtrlProxy (ctx context.Context ) error {
87- return ga .cp .start (ctx )
72+ func (ga * ceGateway ) Start (ctx context.Context ) error {
73+ if err := ga .startCloudEventsReceiver (ctx ); err != nil {
74+ return err
75+ }
76+ if err := ga .proxySrv .Start (); err != nil {
77+ return err
78+ }
79+ return nil
8880}
8981
90- func (ga * ceGateway ) StartReceive (ctx context.Context ) error {
91- ls , err := net .Listen ("tcp" , fmt .Sprintf (":%d" , ga .config .Port ))
82+ func (ga * ceGateway ) Stop () {
83+ ga .proxySrv .Stop ()
84+ if err := ga .ceListener .Close (); err != nil {
85+ log .Warning (context .Background (), "close CloudEvents listener error" , map [string ]interface {}{
86+ log .KeyError : err ,
87+ })
88+ }
89+ }
90+
91+ func (ga * ceGateway ) startCloudEventsReceiver (ctx context.Context ) error {
92+ ls , err := net .Listen ("tcp" , fmt .Sprintf (":%d" , ga .config .GetCloudEventReceiverPort ()))
9293 if err != nil {
9394 return err
9495 }
@@ -97,7 +98,14 @@ func (ga *ceGateway) StartReceive(ctx context.Context) error {
9798 if err != nil {
9899 return err
99100 }
100- return c .StartReceiver (ctx , ga .receive )
101+
102+ ga .ceListener = ls
103+ go func () {
104+ if err := c .StartReceiver (ctx , ga .receive ); err != nil {
105+ panic (fmt .Sprintf ("start CloudEvents receiver failed: %s" , err .Error ()))
106+ }
107+ }()
108+ return nil
101109}
102110
103111func (ga * ceGateway ) receive (ctx context.Context , event v2.Event ) (* v2.Event , protocol.Result ) {
0 commit comments