From 3f24c43dc7c1f06ecfc2497631f650bffdb93fea Mon Sep 17 00:00:00 2001 From: Waldemar Quevedo Date: Wed, 12 Sep 2018 18:40:05 -0700 Subject: [PATCH] Update README and examples Signed-off-by: Waldemar Quevedo --- platforms/nats/README.md | 123 ++++++++++++++++++++------------------- 1 file changed, 63 insertions(+), 60 deletions(-) diff --git a/platforms/nats/README.md b/platforms/nats/README.md index 1eb7776be..9e6e9b1ce 100644 --- a/platforms/nats/README.md +++ b/platforms/nats/README.md @@ -2,7 +2,7 @@ NATS is a lightweight messaging protocol perfect for your IoT/Robotics projects. It operates over TCP, offers a great number of features but an incredibly simple Pub Sub style model of communicating broadcast messages. NATS is blazingly fast as it is written in Go. -This repository contains the Gobot adaptor/drivers to connect to NATS servers. It uses the NATS Go Client available at https://github.com/nats-io/nats. The NATS project is maintained by Nats.io and sponsored by Apcera. Find more information on setting up a NATS server and its capability at http://nats.io/. +This repository contains the Gobot adaptor/drivers to connect to NATS servers. It uses the NATS Go Client available at https://github.com/nats-io/nats. The NATS project is a project part of the [CNCF](https://www.cncf.io/). Find more information on setting up a NATS server and its capability at http://nats.io/. The NATS messaging protocol (http://www.nats.io/documentation/internals/nats-protocol-demo/) is really easy to work with and can be practiced by setting up a NATS server using Go or Docker. For information on setting up a server using the source code, visit https://github.com/nats-io/gnatsd. For information on the Docker image up on Docker Hub, see https://hub.docker.com/_/nats/. Getting the server set up is very easy. The server itself is Golang, can be built for different architectures and installs in a small footprint. This is an excellent way to get communications going between your IoT and Robotics projects. @@ -16,85 +16,88 @@ go get -d -u gobot.io/x/gobot/... ## How to Use -Before running the example, make sure you have an NATS server running somewhere you can connect to +Before running the example, make sure you have an NATS server running somewhere you can connect to (for demo purposes you could also use the public endpoint `demo.nats.io:4222`). ```go package main import ( - "fmt" - "time" + "fmt" + "time" - "gobot.io/x/gobot" - "gobot.io/x/gobot/platforms/nats" + "gobot.io/x/gobot" + "gobot.io/x/gobot/platforms/nats" ) func main() { - natsAdaptor := nats.NewNatsAdaptor("nats", "localhost:4222", 1234) - - work := func() { - natsAdaptor.On("hello", func(msg nats.Message) { - fmt.Println(subject) - }) - natsAdaptor.On("hola", func(msg nats.Message) { - fmt.Println(subject) - }) - data := []byte("o") - gobot.Every(1*time.Second, func() { - natsAdaptor.Publish("hello", data) - }) - gobot.Every(5*time.Second, func() { - natsAdaptor.Publish("hola", data) - }) - } - - robot := gobot.NewRobot("natsBot", - []gobot.Connection{natsAdaptor}, - work, - ) - - robot.Start() + natsAdaptor := nats.NewAdaptor("nats://localhost:4222", 1234) + + work := func() { + natsAdaptor.On("hello", func(msg nats.Message) { + fmt.Printf("[Received on %q] %s\n", msg.Subject, string(msg.Data)) + }) + natsAdaptor.On("hola", func(msg nats.Message) { + fmt.Printf("[Received on %q] %s\n", msg.Subject, string(msg.Data)) + }) + + data := []byte("Hello Gobot!") + gobot.Every(1*time.Second, func() { + natsAdaptor.Publish("hello", data) + }) + gobot.Every(5*time.Second, func() { + natsAdaptor.Publish("hola", data) + }) + } + + robot := gobot.NewRobot("natsBot", + []gobot.Connection{natsAdaptor}, + work, + ) + + robot.Start() } ``` -To run with TLS enabled, set the URL scheme prefix to tls://. Make sure the NATS server has TLS enabled and use the NATS option parameters to pass in the TLS settings to the adaptor. Refer to the github.com/nats-io/go-nats README for more TLS option parameters. +To run with TLS enabled, set the URL scheme prefix to `tls://`. Make sure the NATS server has TLS enabled and use the NATS option parameters to pass in the TLS settings to the adaptor. Refer to the [github.com/nats-io/go-nats](https://github.com/nats-io/go-nats) README for more TLS option parameters. ```go package main import ( - "fmt" - "time" - natsio "github.com/nats-io/nats" - "gobot.io/x/gobot" - "gobot.io/x/gobot/platforms/nats" + "fmt" + "time" + + natsio "github.com/nats-io/go-nats" + "gobot.io/x/gobot" + "gobot.io/x/gobot/platforms/nats" ) func main() { - natsAdaptor := nats.NewNatsAdaptor("tls://localhost:4222", 1234, natsio.RootCAs("certs/ca.pem")) - - work := func() { - natsAdaptor.On("hello", func(msg nats.Message) { - fmt.Println(subject) - }) - natsAdaptor.On("hola", func(msg nats.Message) { - fmt.Println(subject) - }) - data := []byte("o") - gobot.Every(1*time.Second, func() { - natsAdaptor.Publish("hello", data) - }) - gobot.Every(5*time.Second, func() { - natsAdaptor.Publish("hola", data) - }) - } - - robot := gobot.NewRobot("natsBot", - []gobot.Connection{natsAdaptor}, - work, - ) - - robot.Start() + natsAdaptor := nats.NewAdaptor("tls://localhost:4222", 1234, natsio.RootCAs("certs/ca.pem")) + + work := func() { + natsAdaptor.On("hello", func(msg nats.Message) { + fmt.Printf("[Received on %q] %s\n", msg.Subject, string(msg.Data)) + }) + natsAdaptor.On("hola", func(msg nats.Message) { + fmt.Printf("[Received on %q] %s\n", msg.Subject, string(msg.Data)) + }) + + data := []byte("Hello Gobot!") + gobot.Every(1*time.Second, func() { + natsAdaptor.Publish("hello", data) + }) + gobot.Every(5*time.Second, func() { + natsAdaptor.Publish("hola", data) + }) + } + + robot := gobot.NewRobot("natsBot", + []gobot.Connection{natsAdaptor}, + work, + ) + + robot.Start() } ```