Skip to main content

Examples

https://github.com/marcel-dempers/docker-development-youtube-series/blob/master/messaging/rabbitmq/applications/publisher/publisher.go

publisher.go

package main

import (

"fmt"

"net/http"

"github.com/julienschmidt/httprouter"

log "github.com/sirupsen/logrus"

"github.com/streadway/amqp"

"os"

)

var rabbit_host = os.Getenv("RABBIT_HOST")

var rabbit_port = os.Getenv("RABBIT_PORT")

var rabbit_user = os.Getenv("RABBIT_USERNAME")

var rabbit_password = os.Getenv("RABBIT_PASSWORD")

func main() {

router := httprouter.New()

router.POST("/publish/:message", func(w http.ResponseWriter, r *http.Request, p httprouter.Params){

submit(w,r,p)

})

fmt.Println("Running...")

log.Fatal(http.ListenAndServe(":80", router))

}

func submit(writer http.ResponseWriter, request *http.Request, p httprouter.Params) {

message := p.ByName("message")

fmt.Println("Received message: " + message)

conn, err := amqp.Dial("amqp://" + rabbit_user + ":" +rabbit_password + "@" + rabbit_host + ":" + rabbit_port +"/")

if err != nil {

log.Fatalf("%s: %s", "Failed to connect to RabbitMQ", err)

}

defer conn.Close()

ch, err := conn.Channel()

if err != nil {

log.Fatalf("%s: %s", "Failed to open a channel", err)

}

defer ch.Close()

q, err := ch.QueueDeclare(

"publisher", // name

true, // durable

false, // delete when unused

false, // exclusive

false, // no-wait

nil, // arguments

)

if err != nil {

log.Fatalf("%s: %s", "Failed to declare a queue", err)

}

err = ch.Publish(

"", // exchange

q.Name, // routing key

false, // mandatory

false, // immediate

amqp.Publishing {

ContentType: "text/plain",

Body: []byte(message),

})

if err != nil {

log.Fatalf("%s: %s", "Failed to publish a message", err)

}

fmt.Println("publish success!")

}