proof of concept connection to ZeroMQ

pull/1/head
Martin Boehm 2018-01-19 15:58:46 +01:00
parent 8676db1e14
commit bc5b99003e
3 changed files with 54 additions and 1 deletions

View File

@ -26,6 +26,13 @@ CGO_LDFLAGS="-L/path/to/rocksdb -lrocksdb -lstdc++ -lm -lz -lbz2 -lsnappy -llz4
go get github.com/tecbot/gorocksdb
```
Install ZeroMQ: https://github.com/zeromq/libzmq
Install Go interface to ZeroMQ:
```
go get github.com/pebbe/zmq4
```
Install blockbook:
```

39
bitcoin/mq.go 100644
View File

@ -0,0 +1,39 @@
package bitcoin
import (
"encoding/binary"
"encoding/hex"
"log"
zmq "github.com/pebbe/zmq4"
)
func ZeroMQ(binding string) {
context, err := zmq.NewContext()
if err != nil {
log.Fatal(err)
}
socket, err := context.NewSocket(zmq.SUB)
if err != nil {
log.Fatal(err)
}
socket.SetSubscribe("hashblock")
socket.SetSubscribe("hashtx")
socket.SetSubscribe("rawblock")
socket.SetSubscribe("rawtx")
socket.Connect(binding)
defer socket.Close()
for i := 0; i < 101; i++ {
msg, err := socket.RecvMessageBytes(0)
if err != nil {
log.Fatal(err)
}
topic := string(msg[0])
body := hex.EncodeToString(msg[1])
sequence := uint32(0)
if len(msg[len(msg)-1]) == 4 {
sequence = binary.LittleEndian.Uint32(msg[len(msg)-1])
}
log.Printf("%s-%d (%v) %s", topic, sequence, msg[len(msg)-1], body)
}
}

View File

@ -54,12 +54,19 @@ var (
dryRun = flag.Bool("dryrun", false, "do not index blocks, only download")
parse = flag.Bool("parse", false, "use in-process block parsing")
httpServerBinding = flag.String("httpserver", "nil", "http server binding [address]:port, by default no http server")
httpServerBinding = flag.String("httpserver", "nil", "http server binding [address]:port, if missing no http server")
zeroMQBinding = flag.String("zeromq", "nil", "binding to zeromq, if missing no zeromq connection")
)
func main() {
flag.Parse()
if *zeroMQBinding != "nil" {
bitcoin.ZeroMQ(*zeroMQBinding)
return
}
if *repair {
if err := db.RepairRocksDB(*dbPath); err != nil {
log.Fatal(err)