Voici mon exemple de sub.go :
package main
import (
"fmt"
nats "github.com/nats-io/nats.go"
)
type Message struct {
Status string `json:"Status"`
Msg string `json:"Msg"`
}
type Response struct {
Status string `json:"Status"`
Msg string `json:"Msg"`
}
var nc *nats.Conn
var c *nats.EncodedConn
func start(){
nc, _ := nats.Connect("127.0.0.1:4222")
c, _ := nats.NewEncodedConn(nc, nats.JSON_ENCODER)
c.QueueSubscribe("subject_toto", "queue_titi", func(_, reply string, message *Message) {
fmt.Printf("%+v\n", message)
var response Response
response.Msg = "message received"
response.Status = "Ok"
c.Publish("reply", response)
c.Flush()
})
c.Flush()
}
func main() {
fmt.Println("begin")
go start()
defer c.Close()
fmt.Scanln()
nc.Drain()
// Close connection
nc.Close()
fmt.Println("done")
}
Et cela fonctionne parfaitement, alors maintenant je voudrais publier un message dans cette file d'attente, voici mon pub.go :
package main
import (
"fmt"
nats "github.com/nats-io/nats.go"
"time"
)
type Message struct {
Status string `json:"Status"`
Msg string `json:"Msg"`
}
type Response struct {
Status string `json:"Status"`
Msg string `json:"Msg"`
}
var nc *nats.Conn
var c *nats.EncodedConn
func start(){
var err error
var message Message
var response Response
nc, _ := nats.Connect("127.0.0.1:4222")
c, _ := nats.NewEncodedConn(nc, nats.JSON_ENCODER)
message.Status = "Ok"
message.Msg = "hello"
err = c.Request("subject_toto", message, &response, 6*time.Second)
if err != nil {
fmt.Printf("%+v\n", err)
}
fmt.Printf("%+v\n","response")
fmt.Printf("%+v\n", response)
defer c.Close()
}
func main() {
fmt.Println("begin")
start()
fmt.Println("done")
}
Mais lorsque j'essaie de le publier, je reçois une réponse vide :
response {Status : Msg:}
Un début de réponse semble utiliser PublishRequest mais il semble que je ne puisse envoyer qu'une chaîne de caractères au serveur et non une structure.