Skip to content

Instantly share code, notes, and snippets.

@vbogretsov
Created September 19, 2017 14:52
Show Gist options
  • Select an option

  • Save vbogretsov/32e74635261fee8d20201578ddc05f62 to your computer and use it in GitHub Desktop.

Select an option

Save vbogretsov/32e74635261fee8d20201578ddc05f62 to your computer and use it in GitHub Desktop.
Very basic prototype for RPC via AMQ
package main
import (
"log"
"strconv"
"github.com/streadway/amqp"
)
func test(conn *amqp.Connection) error {
channel, err := conn.Channel()
if err != nil {
return err
}
queue, err := channel.QueueDeclare("", false, true, false, false, nil)
if err != nil {
return err
}
publishing := amqp.Publishing{
ReplyTo: "ServiceMethod",
CorrelationId: queue.Name,
MessageId: strconv.FormatUint(32, 10),
Body: []byte("SYN"),
}
channel.Publish("", "testrpc", false, false, publishing)
message, err := channel.Consume(queue.Name, "", true, false, false, false, nil)
if err != nil {
return err
}
delivery := <-message
log.Printf("CorrelationId: %v\n", delivery.CorrelationId)
log.Printf("ReplyTo: %v\n", delivery.ReplyTo)
log.Printf("MessageId: %v\n", delivery.MessageId)
log.Printf("Body: %s", string(delivery.Body))
return nil
}
func main() {
conn, err := amqp.Dial("amqp://guest:guest@localhost:5672/")
if err != nil {
log.Fatal(err)
}
err = test(conn)
if err != nil {
log.Fatal(err)
}
err = test(conn)
if err != nil {
log.Fatal(err)
}
}
package main
import (
"log"
"github.com/streadway/amqp"
)
func main() {
conn, err := amqp.Dial("amqp://guest:guest@localhost:5672/")
if err != nil {
log.Fatal(err)
}
channel, err := conn.Channel()
if err != nil {
log.Fatal(err)
}
queue, err := channel.QueueDeclare("testrpc", false, false, false, false, nil)
if err != nil {
log.Fatal(err)
}
messages, err := channel.Consume(queue.Name, "", true, false, false, false, nil)
if err != nil {
log.Fatal(err)
}
for delivery := range messages {
log.Printf("CorrelationId: %v\n", delivery.CorrelationId)
log.Printf("ReplyTo: %v\n", delivery.ReplyTo)
log.Printf("MessageId: %v\n", delivery.MessageId)
log.Printf("Body: %s", string(delivery.Body))
publishing := amqp.Publishing{
ReplyTo: delivery.ReplyTo,
MessageId: delivery.MessageId,
CorrelationId: delivery.CorrelationId,
Body: []byte("ACK"),
}
err = channel.Publish("", delivery.CorrelationId, false, false, publishing)
if err != nil {
log.Fatal(err)
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment