現在、"Go言語によるWebアプリケーション開発"を手を動かしながら読んでいます。
chapter5.3まで完了したんだけど、書籍と違ってて少しハマったところをメモしておきます。
MongoDBの接続について
mgo.Dial("localhost")
書籍ではID/PASS指定なしで接続しているんだけど、現在のMongoDBはデフォルトではID/PASSを指定しないとコレクションの読み書きが出来ない(接続は出来るんだけど、読み書きしようとするとダメ)ようなので、認証を渡して接続する必要があります。
mongoInfo := &mgo.DialInfo{ Addrs: []string{"localhost"}, Username: "root", Password: "example", } db, err = mgo.DialWithInfo(mongoInfo)
Goから使用するNSQドライバについて
書籍では
$ go get github.com/bitly/go-nsq go: github.com/bitly/go-nsq@v1.0.8: parsing go.mod: unexpected module path "github.com/nsqio/go-nsq" go: error loading module requirements
を利用するよう案内があるんだけど、インストールしようとするとlatest v1.0.8のfindはできるんだけど、何故か有効なモジュールパスではないと叱られます。
多分、GitHubでのリポジトリがbitlyからnsqioに変更されてるらしくてnsqioからgo getしてきた。
$ go get github.com/nsqio/go-nsq go: finding github.com/nsqio/go-nsq v1.0.8 go: finding github.com/golang/snappy v0.0.1 go: downloading github.com/nsqio/go-nsq v1.0.8 go: downloading github.com/golang/snappy v0.0.1
何気に結構ハマった(^_^;)
NSQのdocker-compose.yaml
これは書籍の間違いではなく、僕がDockerでNSQを構築してハマったことです。
pub, err := nsq.NewProducer("localhost:4150", nsq.NewConfig()) pub.Publish("topicname", []byte("topicdata"))
このようにgo-nsqから接続しようとすると、以下のエラーが出て接続できなかった。
2020/07/06 15:59:13 INF 1 (localhost:4150) connecting to nsqd 2020/07/06 15:59:13 ERR 1 (localhost:4150) error connecting to nsqd - dial tcp [::1]:4150: connect: connection refused
うーん。ファイアーウォールで弾いてるっぽいようなメッセージなんだよねー。
docker-compose.yamlは NSQ Docs 1.2.0 - Docker のページから拝借してきた。
うーん。go-nsqからlocalhostにDockerで立てたnsqにつながらない。
— Fumiya Ichikawa (@LET__IT__RIDE) July 6, 2020
2020/07/06 15:59:13 ERR 1 (localhost:4150) error connecting to nsqd - dial tcp [::1]:4150: connect: connection refused
しばらく悩んでて、何気にdocker ps
打ったら解決した(笑)
ああ、公式からdocker-compose拝借してきたらローカルポートのバイデンィングが書かれてないって感じ?(^_^;)
— Fumiya Ichikawa (@LET__IT__RIDE) July 6, 2020
ports: - "4150" - "4151"
フォワードポートの記述がされてないから、ローカルポートは適当なの使ってるだけだった笑
出来上がりのdocker-compose.yaml
mongodb含む これで無事接続できました(^_^)
version: '3' services: nsqlookupd: image: nsqio/nsq command: /nsqlookupd ports: - "4160:4160" - "4161:4161" nsqd: image: nsqio/nsq command: sh -c "/nsqd --lookupd-tcp-address=nsqlookupd:4160 && --broadcast-address=nsqlookupd" depends_on: - nsqlookupd ports: - "4150:4150" - "4151:4151" nsqadmin: image: nsqio/nsq command: /nsqadmin --lookupd-http-address=nsqlookupd:4161 depends_on: - nsqlookupd ports: - "4171:4171" mongo: image: mongo restart: always environment: MONGO_INITDB_ROOT_USERNAME: root MONGO_INITDB_ROOT_PASSWORD: example ports: - 27017:27017
ちゃんちゃん