proof of concept connection to ZeroMQ
This commit is contained in:
parent
8676db1e14
commit
bc5b99003e
@ -26,6 +26,13 @@ CGO_LDFLAGS="-L/path/to/rocksdb -lrocksdb -lstdc++ -lm -lz -lbz2 -lsnappy -llz4
|
|||||||
go get github.com/tecbot/gorocksdb
|
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:
|
Install blockbook:
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|||||||
39
bitcoin/mq.go
Normal file
39
bitcoin/mq.go
Normal 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)
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -54,12 +54,19 @@ var (
|
|||||||
dryRun = flag.Bool("dryrun", false, "do not index blocks, only download")
|
dryRun = flag.Bool("dryrun", false, "do not index blocks, only download")
|
||||||
parse = flag.Bool("parse", false, "use in-process block parsing")
|
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() {
|
func main() {
|
||||||
flag.Parse()
|
flag.Parse()
|
||||||
|
|
||||||
|
if *zeroMQBinding != "nil" {
|
||||||
|
bitcoin.ZeroMQ(*zeroMQBinding)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
if *repair {
|
if *repair {
|
||||||
if err := db.RepairRocksDB(*dbPath); err != nil {
|
if err := db.RepairRocksDB(*dbPath); err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user