前面还是按照实验一的步骤,新建文件夹和go文件,然后编写代码
package main
import (
"log"
"github.com/google/uuid"
maelstrom "github.com/jepsen-io/maelstrom/demo/go"
)
func main() {
n := maelstrom.NewNode()
n.Handle("generate", func(msg maelstrom.Message) error {
var body map[string]any = make(map[string]any)
// if err := json.Unmarshal(msg.Body, &body); err != nil {
// return err
// }
id := uuid.New().String()
body["type"] = "generate_ok"
body["id"] = id
return n.Reply(msg, body)
})
if err := n.Run(); err != nil {
log.Fatal(err)
}
}
主要是接受的generate类型的消息,接收到后,用uuid这个工具生成随机且唯一的id,并将这个id和type一起封装到body里面,回复给节点。
最后执行
./maelstrom test -w unique-ids --bin ~/go/bin/maelstrom-unique-ids --time-limit 30 --rate 1000 --node-count 3 --availability total --nemesis partition
注意–bin后面是放的二进制文件路径,–node-count 3代表3个节点集群
如果收到everything looks good就证明成功了!