Installation
This is pretty quick for your local setup
Untar the tarball into ~/bin folder Upon untarring ensure that the
~/bin folder has all the files named nsq_
$
wget
https://s3.amazonaws.com/bitly-downloads/nsq/nsq-0.2.31.darwin-amd64.go1.3.1.tar.gz
$ tar xvfz nsq-0.2.31.darwin-amd64.go1.3.1.tar.gz
$ sudo mkdir -p /usr/local/nsq/bin
$ sudo mv nsq-0.2.31.darwin-amd64.go1.3.1/bin/* /usr/local/nsq/bin |
Setup NSQ and PATH environment variables with root privileges:
# echo 'export
NSQROOT=/usr/local/nsq' | tee -a /etc/profile
# echo 'export PATH=$PATH:/usr/local/nsq/bin' | tee -a /etc/profile |
Start the following daemons
$
source /etc/profile
$
nsqlookupd &
$ nsqd --lookupd-tcp-address=127.0.0.1:4160
$ nsqadmin --lookupd-http-address=127.0.0.1:4161 |
If done successfully you will be able to view a web UI that looks like
this:
nsqadmin is a Web UI to view aggregated cluster stats in realtime and
perform various administrative tasks.
requires the golang for the next step, if there is no golang on your
system you can install with the tutorial at the following
link
Writing Your Go Program
I like creating the consumer first so I can see the handler in action
after pushing a message with a producer (see next section).
please create directory src in your home directory and in src directory
create consumer and producer directory
$ mkdir src
$ cd src
$ mkdir
consumer producer |
Get go client library
$ go get -u -v
github.com/bitly/go-nsq
$ go get -u -v
github.com/nsqio/go-nsq
|
Creating a consumer
create file like below in
~/src/consumer/consumer01.go
package
main
import (
"log"
"sync"
"github.com/nsqio/go-nsq"
)
func main() {
wg := &sync.WaitGroup{}
wg.Add(1)
decodeConfig := nsq.NewConfig()
c, err := nsq.NewConsumer("NSQ_Topic",
"NSQ_Channel", decodeConfig)
if err != nil {
log.Panic("Could not create consumer")
}
//c.MaxInFlight defaults to 1
c.AddHandler(nsq.HandlerFunc(func(message *nsq.Message) error {
log.Println("NSQ message received:")
log.Println(string(message.Body))
return nil
}))
err = c.ConnectToNSQD("127.0.0.1:4150")
if err != nil {
log.Panic("Could not connect")
}
log.Println("Awaiting messages from NSQ
topic \"NSQ Topic\"...")
wg.Wait()
} |
Now run this consumer program:
You’ll get this output:
2019/04/08
03:41:33 INF 1 [NSQ_Topic/NSQ_Channel]
(127.0.0.1:4150) connecting to nsqd
2019/04/08
03:41:33 Awaiting messages from NSQ topic "NSQ Topic"... |
This should hang there waiting to receive a NSQ message from a topic
you specify. Nothing will happen just yet since there aren’t
any queued up messages for this particular topic.
Leave this program running in a terminal window for now. In the next
step we’ll push a message to it.
Creating a Producer
You can publish a message with a producer with some simple code like
this:
create file like below in
~/src/producer/producer01.go
package main
import (
"log"
"github.com/nsqio/go-nsq"
)
func main() {
config := nsq.NewConfig()
p, err := nsq.NewProducer("127.0.0.1:4150", config)
if err != nil {
log.Panic(err)
}
err = p.Publish("NSQ_Topic", []byte("sample NSQ message"))
if err != nil {
log.Panic(err)
}
} |
Now run this publisher program:
In this terminal window, you’ll only see this message
indicating your message was published to NSQ:
go
run producer01.go
2019/04/08 03:43:35 INF 1
(127.0.0.1:4150) connecting to nsqd |
If you look at your consumer terminal window that you left running from
the previous step, you’ll now see this additional output:
2019/04/08
03:41:33 Awaiting messages from NSQ topic "NSQ Topic"...
2019/04/08
03:43:35 NSQ message received:
2019/04/08
03:43:35 sample NSQ message topic |
Dont forget add firewall rule
# firewall-cmd --zone=public
--add-port=4171/tcp
# firewall-cmd
--zone=public --add-port=4171/tcp --permanent
# firewall-cmd
--zone=public --add-port=4150/tcp
# firewall-cmd
--zone=public --add-port=4150/tcp --permanent
# firewall-cmd
--zone=public --add-port=4151/tcp
# firewall-cmd
--zone=public --add-port=4151/tcp --permanent
# firewall-cmd
--zone=public --add-port=4160/tcp
# firewall-cmd
--zone=public --add-port=4160/tcp --permanent
# firewall-cmd
--zone=public --add-port=4161/tcp
# firewall-cmd
--zone=public --add-port=4161/tcp --permanent |
Congrats - you just pushed and received your first NSQ message!
If you go back to your web UI console you’ll see your
newly-created topic. If you drill into this topic, you can also see the
channel that you consumed the message to, with the message counter at 1: