package main import ( "context" "crypto/tls" "crypto/x509" "flag" "fmt" "io/ioutil" "log" "time" "github.com/Azure/go-amqp" ) func main() { flag.Parse() tlsConfig, err := NewTLSConfig("client.cer.pem", "client.key.pem", "server.cer.pem") if err != nil { log.Fatal(err) } client, err := amqp.Dial("amqps://server.fr:5671", amqp.ConnTLSConfig(tlsConfig), amqp.ConnSASLAnonymous()) if err != nil { log.Fatal("Dialing AMQP server:", err) } defer client.Close() // Open a session session, err := client.NewSession() if err != nil { log.Fatal("Creating AMQP session:", err) } ctx := context.Background() // Send a message { // Create a sender sender, err := session.NewSender( amqp.LinkTargetAddress("/queue-name"), ) if err != nil { log.Fatal("Creating sender link:", err) } ctx, cancel := context.WithTimeout(ctx, 5*time.Second) // Send message err = sender.Send(ctx, amqp.NewMessage([]byte("Hello!"))) if err != nil { log.Fatal("Sending message:", err) } sender.Close(ctx) cancel() } // Continuously read messages { // Create a receiver receiver, err := session.NewReceiver( amqp.LinkSourceAddress("/queue-name"), amqp.LinkCredit(10), ) if err != nil { log.Fatal("Creating receiver link:", err) } defer func() { ctx, cancel := context.WithTimeout(ctx, 1*time.Second) receiver.Close(ctx) cancel() }() for { // Receive next message msg, err := receiver.Receive(ctx) if err != nil { log.Fatal("Reading message from AMQP:", err) } // Accept message receiver.AcceptMessage(context.Background(), msg) fmt.Printf("Message received: %s\n", msg.GetData()) } } } func NewTLSConfig(clientCertFile, clientKeyFile, caCertFile string) (*tls.Config, error) { tlsConfig := tls.Config{} // Load client cert cert, err := tls.LoadX509KeyPair(clientCertFile, clientKeyFile) if err != nil { return &tlsConfig, err } tlsConfig.Certificates = []tls.Certificate{cert} // Load CA cert caCert, err := ioutil.ReadFile(caCertFile) if err != nil { return &tlsConfig, err } caCertPool := x509.NewCertPool() caCertPool.AppendCertsFromPEM(caCert) tlsConfig.RootCAs = caCertPool return &tlsConfig, err }