规则引擎

This commit is contained in:
PandaGoAdmin
2023-03-01 16:55:47 +08:00
parent 8e854ce527
commit 1be2dc7537
53 changed files with 1104 additions and 418 deletions

View File

@@ -1,17 +1,28 @@
package message
import "github.com/sirupsen/logrus"
// Message ...
type Message interface {
GetOriginator() string
GetType() string
GetPayload() []byte
GetData() []byte
GetMetadata() Metadata
SetType(string)
SetPayload([]byte)
SetData([]byte)
SetOriginator(string)
SetMetadata(Metadata)
MarshalBinary() ([]byte, error)
UnmarshalBinary(b []byte) error
}
// Metadata ...
type Metadata interface {
Keys() []string
GetKeyValue(key string) interface{}
SetKeyValue(key string, val interface{})
}
// Predefined message types
const (
MessageTypePostAttributesRequest = "Post attributes"
@@ -25,31 +36,75 @@ const (
// NewMessage ...
func NewMessage() Message {
return &defaultMessage{
payload: []byte{},
data: []byte{},
}
}
type defaultMessage struct {
originator string //数据发布者
messageType string //数据类型,数据来源
payload []byte //二进制数据
id string //uuid
ts int64 //时间戳
msgType string //消息类型,数据来源
originator string //数据发布者
customerId string //客户Id UUID
entityId string //实体Id UUID
data []byte //数据
dataType string //数据类型 JSON
metadata Metadata //数据的元数据
}
// NewMessageWithDetail ...
func NewMessageWithDetail(originator string, messageType string, payload []byte) Message {
func NewMessageWithDetail(originator string, messageType string, msg []byte) Message {
return &defaultMessage{
originator: originator,
messageType: messageType,
payload: payload,
originator: originator,
msgType: messageType,
data: msg,
}
}
func (t *defaultMessage) GetOriginator() string { return t.originator }
func (t *defaultMessage) GetType() string { return t.messageType }
func (t *defaultMessage) GetPayload() []byte { return t.payload }
func (t *defaultMessage) SetType(messageType string) { t.messageType = messageType }
func (t *defaultMessage) SetPayload(payload []byte) { t.payload = payload }
func (t *defaultMessage) GetType() string { return t.msgType }
func (t *defaultMessage) GetData() []byte { return t.data }
func (t *defaultMessage) GetMetadata() Metadata { return t.metadata }
func (t *defaultMessage) SetType(msgType string) { t.msgType = msgType }
func (t *defaultMessage) SetData(data []byte) { t.data = data }
func (t *defaultMessage) SetOriginator(originator string) { t.originator = originator }
func (t *defaultMessage) SetMetadata(metadata Metadata) { t.metadata = metadata }
func (t *defaultMessage) MarshalBinary() ([]byte, error) { return nil, nil }
func (t *defaultMessage) UnmarshalBinary(b []byte) error { return nil }
// NewMetadata ...
func NewMetadata() Metadata {
return &defaultMetadata{
values: make(map[string]interface{}),
}
}
type defaultMetadata struct {
values map[string]interface{}
}
func newDefaultMetadata(vals map[string]interface{}) Metadata {
return &defaultMetadata{
values: vals,
}
}
func (t *defaultMetadata) Keys() []string {
keys := make([]string, 0)
for key := range t.values {
keys = append(keys, key)
}
return keys
}
func (t *defaultMetadata) GetKeyValue(key string) interface{} {
if _, found := t.values[key]; !found {
logrus.Fatalf("no key '%s' in metadata", key)
}
return t.values[key]
}
func (t *defaultMetadata) SetKeyValue(key string, val interface{}) {
t.values[key] = val
}