github.com/angryronald/go-kit@v0.0.0-20240505173814-ff2bd9c79dbf/test/docker/rabbitmq/rabbitmq.dockertest.go (about) 1 package rabbitmq 2 3 import ( 4 "fmt" 5 "time" 6 7 "github.com/ory/dockertest" 8 "github.com/sirupsen/logrus" 9 // "github.com/streadway/amqp" 10 amqp "github.com/rabbitmq/amqp091-go" 11 ) 12 13 var resource *dockertest.Resource 14 15 func GenerateInstance(pool *dockertest.Pool) *dockertest.Resource { 16 var err error 17 18 // Set up options for RabbitMQ container 19 options := &dockertest.RunOptions{ 20 Repository: "rabbitmq", 21 Tag: "3-management", 22 Env: []string{ 23 "RABBITMQ_DEFAULT_USER=user", 24 "RABBITMQ_DEFAULT_PASS=password", 25 }, 26 } 27 28 // Run RabbitMQ container 29 resource, err = pool.RunWithOptions(options) 30 if err != nil { 31 logrus.Fatalf("Could not start RabbitMQ container: %s", err) 32 } 33 34 time.Sleep(10 * time.Second) 35 36 // Wait for RabbitMQ to be ready 37 // if err := pool.Retry(func() error { 38 // conn, err := amqp.Dial(fmt.Sprintf( 39 // "amqp://user:password@%s:%s/", 40 // resource.GetBoundIP("5672/tcp"), 41 // resource.GetPort("5672/tcp"), 42 // )) 43 // if err != nil { 44 // return err 45 // } 46 // defer conn.Close() 47 // return nil 48 // }); err != nil { 49 // logrus.Fatalf("Could not connect to RabbitMQ: %s", err) 50 // } 51 if err := pool.Retry(func() error { 52 conn, err := amqp.Dial(fmt.Sprintf( 53 "amqp://user:password@%s:%s/", 54 host, 55 port, 56 )) 57 if err != nil { 58 return err 59 } 60 defer conn.Close() 61 return nil 62 }); err != nil { 63 logrus.Fatalf("Could not connect to RabbitMQ: %s", err) 64 } 65 66 // At this point, RabbitMQ should be running and ready to use. 67 68 // You can use the streadway/amqp library to interact with RabbitMQ. 69 // For example, you can declare a queue and publish a message: 70 // conn, err := amqp.Dial(fmt.Sprintf( 71 // "amqp://user:password@%s:%s/", 72 // host, 73 // port, 74 // )) 75 // if err != nil { 76 // logrus.Fatalf("Could not connect to RabbitMQ: %s", err) 77 // } 78 79 // ch, err := conn.Channel() 80 // if err != nil { 81 // logrus.Fatalf("Could not open a channel: %s", err) 82 // } 83 84 return resource 85 } 86 87 func GetConnection(pool *dockertest.Pool) (*amqp.Connection, *dockertest.Resource) { 88 if resource == nil { 89 resource = GenerateInstance(pool) 90 } 91 92 conn, err := amqp.Dial(fmt.Sprintf( 93 "amqp://user:password@%s:%s/", 94 host, 95 port, 96 )) 97 if err != nil { 98 logrus.Fatalf("Could not connect to RabbitMQ: %s", err) 99 } 100 101 return conn, resource 102 }