Skip to content

Commit f0ff0a3

Browse files
committed
modify encode/decode
1 parent 96e928f commit f0ff0a3

File tree

2 files changed

+32
-21
lines changed

2 files changed

+32
-21
lines changed

gorm.go

+21-12
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package outbox
33
import (
44
"context"
55
"database/sql"
6+
"encoding/json"
67
"fmt"
78
"reflect"
89
"sync"
@@ -62,15 +63,20 @@ func (e *gormEngine) newSubscribeHandler(topic, group string, h SubscribeHandler
6263
return func(ctx context.Context, baseMsg *eventbus.Message) (err error) {
6364
id := e.node.Generate().Int64()
6465
var value string
65-
if value, err = encodeValue(baseMsg); err != nil {
66+
if value, err = EncodeValue(baseMsg.Value); err != nil {
67+
return
68+
}
69+
baseMsg.Value = value
70+
var bytes []byte
71+
if bytes, err = json.Marshal(baseMsg); err != nil {
6672
return
6773
}
6874
r := &Received{
6975
ID: id,
7076
Version: MessageVersion,
7177
Topic: topic,
7278
Group: group,
73-
Value: value,
79+
Value: string(bytes),
7480
Retries: 0,
7581
CreatedAt: time.Now(),
7682
StatusName: StatusNameScheduled,
@@ -115,6 +121,10 @@ func (e *gormEngine) publish(ctx context.Context, db *gorm.DB, topic string, v i
115121
if len(callback) > 0 {
116122
callbackName = callback[0]
117123
}
124+
var value string
125+
if value, err = EncodeValue(v); err != nil {
126+
return
127+
}
118128
msg := &eventbus.Message{
119129
Header: eventbus.MessageHeader{
120130
MessageHeaderMsgIDKey: fmt.Sprint(id),
@@ -123,17 +133,17 @@ func (e *gormEngine) publish(ctx context.Context, db *gorm.DB, topic string, v i
123133
MessageHeaderMsgSendTimeKey: fmt.Sprint(timeNow.Unix()),
124134
MessageHeaderMsgCallbackKey: callbackName,
125135
},
126-
Value: v,
136+
Value: value,
127137
}
128-
var value string
129-
if value, err = encodeValue(msg); err != nil {
138+
var bytes []byte
139+
if bytes, err = json.Marshal(msg); err != nil {
130140
return
131141
}
132142
p := &Published{
133143
ID: id,
134144
Version: MessageVersion,
135145
Topic: topic,
136-
Value: value,
146+
Value: string(bytes),
137147
Retries: 0,
138148
CreatedAt: timeNow,
139149
StatusName: StatusNameScheduled,
@@ -310,8 +320,8 @@ func (e *gormEngine) failedPublishedRetryInterval() (err error) {
310320
if err = e.retriePublished(e.db, published.ID); err != nil {
311321
return
312322
}
313-
314-
if msg, msgErr := decodeValue([]byte(published.Value)); msgErr != nil {
323+
var msg Message
324+
if msgErr := DecodeValue(published.Value, &msg); msgErr != nil {
315325
e.logger.Errorf(ctx, "failedRetryInterval-decodeValue error: %v", msgErr)
316326
} else {
317327
if pubErr := e.eventBus.Publish(ctx, published.Topic, msg); pubErr != nil {
@@ -356,16 +366,15 @@ func (e *gormEngine) failedReceivedRetryInterval() (err error) {
356366
if err = e.retrieReceived(e.db, received.ID); err != nil {
357367
return
358368
}
359-
360-
if msg, msgErr := decodeValue([]byte(received.Value)); msgErr != nil {
369+
var msg Message
370+
if msgErr := DecodeValue(received.Value, &msg); msgErr != nil {
361371
e.logger.Errorf(ctx, "failedRetryInterval-decodeValue error: %v", msgErr)
362372
} else {
363373
hex := fmt.Sprintf("%s-%s", received.Topic, received.Group)
364374
if subscribeItem, subscribeItemOk := e.subscribeItems[hex]; !subscribeItemOk || subscribeItem.h == nil {
365375
e.logger.Warnf(ctx, "failedRetryInterval-subscribeItem %s error: %v", hex, msgErr)
366376
} else {
367-
subMsg := Message(*msg)
368-
if subErr := subscribeItem.h(ctx, &subMsg); subErr != nil {
377+
if subErr := subscribeItem.h(ctx, &msg); subErr != nil {
369378
e.logger.Errorf(ctx, "failedRetryInterval-subscribeItem %s execute error: %v", hex, msgErr)
370379
} else {
371380
if err = e.changePublishStateSucceeded(e.db, received.ID); err != nil {

message.go

+11-9
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package outbox
22

33
import (
4+
"encoding/base64"
45
"encoding/json"
56
"strconv"
67
"time"
@@ -55,21 +56,22 @@ func (m *Message) ID() string {
5556
return id
5657
}
5758

58-
func encodeValue(v *eventbus.Message) (s string, err error) {
59-
var data []byte
60-
data, err = json.Marshal(v)
61-
if err != nil {
59+
// EncodeValue 对值进行编码
60+
func EncodeValue(v interface{}) (s string, err error) {
61+
var bytes []byte
62+
if bytes, err = json.Marshal(v); err != nil {
6263
return
6364
}
64-
s = string(data)
65+
s = base64.StdEncoding.EncodeToString(bytes)
6566
return
6667
}
6768

68-
func decodeValue(data []byte) (msg *eventbus.Message, err error) {
69-
var tempMsg eventbus.Message
70-
if err = json.Unmarshal(data, &tempMsg); err != nil {
69+
// DecodeValue 对值进行解码
70+
func DecodeValue(s string, v interface{}) (err error) {
71+
var bytes []byte
72+
if bytes, err = base64.StdEncoding.DecodeString(s); err != nil {
7173
return
7274
}
73-
msg = &tempMsg
75+
err = json.Unmarshal(bytes, v)
7476
return
7577
}

0 commit comments

Comments
 (0)