diff --git a/conf/wheat-cache.yaml b/conf/wheat-cache.yaml index 981dc4379964a2b75dd70a9f958760cc093d65d2..0a71f5d37aae40be88967fd6c8105cac3d023f86 100644 --- a/conf/wheat-cache.yaml +++ b/conf/wheat-cache.yaml @@ -14,8 +14,13 @@ lruCache: eventDriverSize: 2000 workTime: 1 + logPrint: stath: [ "debug", "error" ] + +middleChain: + middles:["logMiddle","mapKey"] + diff --git a/pkg/middle/define.go b/pkg/middle/define.go index 678c75b60273afbc6a23455ed128809cea7adb9c..fcc5f63b7723ff75aba58f74a017890c87242bd3 100644 --- a/pkg/middle/define.go +++ b/pkg/middle/define.go @@ -1,7 +1,17 @@ package middle -import getMiddlewareMap "gitee.com/timedb/wheatCache/plugins/config" +import ( + "sync" -func Init() { - getMiddlewareMap.GetMiddlewareMap() + "gitee.com/timedb/wheatCache/plugins" + getMiddlewareMap "gitee.com/timedb/wheatCache/plugins/config" +) + +func Init() map[string]plugins.MiddleToolsInterface { + return getMiddlewareMap.GetMiddlewareMap() } + +var ( + oneMiddle sync.Once + MiddleWareDriver *MiddleWare +) diff --git a/pkg/middle/middleware_driver.go b/pkg/middle/middleware_driver.go new file mode 100644 index 0000000000000000000000000000000000000000..7d1d45fd4661375009fdd35e8fdd5dd729284164 --- /dev/null +++ b/pkg/middle/middleware_driver.go @@ -0,0 +1,38 @@ +package middle + +import ( + "context" + + _ "gitee.com/timedb/wheatCache/conf" + "gitee.com/timedb/wheatCache/pkg/event" + "github.com/spf13/viper" +) + +type MiddleWare struct { + eventDriver event.DriverInterface + eventConsumer event.ConsumerInterface +} + +func NewMiddleWare() *MiddleWare { + oneMiddle.Do(func() { + driver := event.NewDriver(1000) + MiddleWareDriver = &MiddleWare{ + eventDriver: driver, + eventConsumer: event.NewConsumer(driver), + } + }) + return MiddleWareDriver +} + +func (m *MiddleWare) GetEventDriver() event.DriverInterface { + return m.eventDriver +} + +func (m *MiddleWare) work(ctx context.Context) { + middlewareMap := Init() + event := m.eventConsumer.Receive(ctx) + middleConf := viper.GetStringSlice("middleChain.middles") + for _, middle := range middleConf { + middlewareMap[middle].Exec(event) + } +} diff --git a/pkg/middle/middleware_driver_test.go b/pkg/middle/middleware_driver_test.go new file mode 100644 index 0000000000000000000000000000000000000000..f5856f6cd98226bbcfbd0c712810825e8c7cc1c2 --- /dev/null +++ b/pkg/middle/middleware_driver_test.go @@ -0,0 +1,50 @@ +package middle + +import ( + "context" + "fmt" + "testing" + + "gitee.com/timedb/wheatCache/pkg/event" +) + +func Test_middleware_driver(t *testing.T) { + + ctx := context.Background() + type Library struct { + driver *MiddleWare + } + + library := &Library{ + driver: NewMiddleWare(), + } + + go library.driver.work(ctx) + + type A struct { + produce event.ProduceInterface + } + + a := &A{ + produce: event.NewProduce(library.driver.eventDriver), + } + + type B struct { + cumsumer event.ConsumerInterface + } + + b := &B{ + cumsumer: event.NewConsumer(library.driver.eventDriver), + } + + book := event.NewEvent("book") + book.SetMsg("title", "goland") + book.SetValue("page", 100) + + go func() { + a.produce.Call(ctx, book) + }() + + b_book := b.cumsumer.Receive(ctx) + fmt.Println(b_book.GetMsg("title")) +} diff --git a/plugins/config/middle.gen.go b/plugins/config/middle.gen.go index addf8c1481aac22d60c2282b001efdbb826951fa..15a055c4dd241fcdf0437eaa7d7843b20301fecd 100644 --- a/plugins/config/middle.gen.go +++ b/plugins/config/middle.gen.go @@ -12,9 +12,11 @@ import ( func GetMiddlewareMap() map[string]plugins.MiddleToolsInterface { + logMiddle := logMiddle.NewMiddleware() + mapKey := mapKey.NewMiddleware() return map[string]plugins.MiddleToolsInterface{ - "logMiddle": logMiddle.NewMiddleware(), - "mapKey": mapKey.NewMiddleware(), + logMiddle.Name(): logMiddle, + mapKey.Name(): mapKey, } } diff --git a/plugins/config/middle.template b/plugins/config/middle.template index 10b56e8e83139dfc22298af611bcff2e4533f180..d9045304ef43e2df8410eafd132df1e70a92995f 100644 --- a/plugins/config/middle.template +++ b/plugins/config/middle.template @@ -12,10 +12,12 @@ import ( func GetMiddlewareMap() map[string]plugins.MiddleToolsInterface { - + {%for dir in dirs %} + {{dir[0]}}:={{dir[0]}}.NewMiddleware() + {%- endfor%} return map[string]plugins.MiddleToolsInterface{ {%for dir in dirs %} - "{{dir[0]}}":{{dir[0]}}.NewMiddleware(), + {{dir[0]}}.Name():{{dir[0]}}, {%- endfor%} } } \ No newline at end of file diff --git a/plugins/define.go b/plugins/define.go index 37538c941beeca2aa04eedb88894314baa8dd179..bd438d8340a48e8f61df42a9f352f12bbb992e34 100644 --- a/plugins/define.go +++ b/plugins/define.go @@ -1,7 +1,9 @@ package plugins +import "gitee.com/timedb/wheatCache/pkg/event" + type MiddleToolsInterface interface { - Init() // 初始化 - Exec(interface{}) (interface{}, error) // 处理用户发送事件 - Name() string // 获取中间件名称 + Init() // 初始化 + Exec(e event.Event) (event.Event, error) // 处理用户发送事件 + Name() string // 获取中间件名称 } diff --git a/plugins/log-middle/middleware.go b/plugins/log-middle/middleware.go index c6ff102cba72391d4a0e138ba2e50e9938dbf30e..23e8f03c69b395d9820deee1376002791fe77116 100644 --- a/plugins/log-middle/middleware.go +++ b/plugins/log-middle/middleware.go @@ -1,8 +1,7 @@ package log_middle import ( - "fmt" - + "gitee.com/timedb/wheatCache/pkg/event" "gitee.com/timedb/wheatCache/plugins" ) @@ -12,9 +11,8 @@ type logMiddle struct { func (i *logMiddle) Init() { } -func (i *logMiddle) Exec(interface{}) (interface{}, error) { - fmt.Println(1) - return nil, nil +func (i *logMiddle) Exec(e event.Event) (event.Event, error) { + return e, nil } func (i *logMiddle) Name() string {