gpt4 book ai didi

采空区 : type mismatch: no fields matched compiling decoder - Golang

转载 作者:数据小太阳 更新时间:2023-10-29 03:19:48 26 4
gpt4 key购买 nike

我在两个不同的流上使用 PubSub,我们从一个流接收消息,运行一些逻辑,如果它符合特定条件,我们将它发布到第二个流。第二个流也在 goroutine 中接收。

现在,我有两个主要函数 HandleMessageHandleRetry,其中前者来自第一个流,第二个用于第二个流。

HandleMessage的相关代码如下:

    if c.handler.ShouldProcess(tx) {
err := c.handler.Process(tx)
if err != nil {
c.log.
WithError(err).
WithField("tx_hash", tx.TxHash.String()).
Error("failed to process")

retryMsg := RetryMessage{
Transaction: tx,
RemainingProcessingAttempts: c.config.MaxProcessingAttempts,
LastAttempt: time.Now(),
}

data, err := pubsub.EncodeMessage(retryMsg)
if err != nil {
c.log.WithError(err).Error("failed to convert retry msg to byte slice")
}

id, err := c.retryQueue.Publish(context.Background(), &pubsub.Message{Data: data})
if err != nil {
c.log.WithError(err).
WithField("id", id).
Error("failed to publish message to retry queue")
}
}
}

HandleRetry 中,函数以

打开
    retryTx := new(RetryMessage)
err := pubsub.DecodeMessage(msg.Data, retryTx)
if err != nil {
c.log.WithError(err).
Error("failed to decode message: not a retry tx")
msg.Ack()
return
}

对于由 HandleRetry 处理的 RetryQueue -- 除了从 HandleMessage 发布的消息外没有其他输入

但是,我不断收到 gob 解码错误提示

level=error msg="解码消息失败:不是重试 tx"env=LOCAL error="gob:类型不匹配:没有字段匹配 RetryMessage 的编译解码器"

RetryMessage 看起来像这样

type RetryMessage struct {
Transaction *firehose.Transaction
RemainingProcessingAttempts int
LastAttempt time.Time
}

编解码函数如下

// EncodeMessage convert an arbitrary interface into a byte slice.
func EncodeMessage(data interface{}) ([]byte, error) {
var buf bytes.Buffer

enc := gob.NewEncoder(&buf)

err := enc.Encode(data)
if err != nil {
return nil, err
}

return buf.Bytes(), nil
}

// DecodeMessage decodes message data into the provided interface.
func DecodeMessage(data []byte, dest interface{}) error {
buf := bytes.NewBuffer(data)
dec := gob.NewDecoder(buf)
return dec.Decode(dest)
}

最佳答案

HandleMessage 中的这段代码中:

        data, err := pubsub.EncodeMessage(retryMsg)
if err != nil {
c.log.WithError(err).Error("failed to convert retry msg to byte slice")
}

错误被忽略,发布消息的 data 字段填充了一个潜在的错误值。检查您是否在日志中看到“无法将重试消息转换为 byte slice ”。

关于采空区 : type mismatch: no fields matched compiling decoder - Golang,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55800616/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com