現在、"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
ちゃんちゃん
