go-micro.dev/v5@v5.12.0/internal/website/docs/broker.md (about) 1 --- 2 layout: default 3 --- 4 5 # Broker 6 7 The broker provides pub/sub messaging for Go Micro services. 8 9 ## Features 10 - Publish messages to topics 11 - Subscribe to topics 12 - Multiple broker implementations 13 14 ## Implementations 15 Supported brokers include: 16 - HTTP (default) 17 - NATS (`go-micro.dev/v5/broker/nats`) 18 - RabbitMQ (`go-micro.dev/v5/broker/rabbitmq`) 19 - Memory (`go-micro.dev/v5/broker/memory`) 20 21 Plugins are scoped under `go-micro.dev/v5/broker/<plugin>`. 22 23 Configure the broker in code or via environment variables. 24 25 ## Example Usage 26 27 Here's how to use the broker in your Go Micro service: 28 29 ```go 30 package main 31 32 import ( 33 "go-micro.dev/v5" 34 "go-micro.dev/v5/broker" 35 "log" 36 ) 37 38 func main() { 39 service := micro.NewService() 40 service.Init() 41 42 // Publish a message 43 if err := broker.Publish("topic", &broker.Message{Body: []byte("hello world")}); err != nil { 44 log.Fatal(err) 45 } 46 47 // Subscribe to a topic 48 _, err := broker.Subscribe("topic", func(p broker.Event) error { 49 log.Printf("Received message: %s", string(p.Message().Body)) 50 return nil 51 }) 52 if err != nil { 53 log.Fatal(err) 54 } 55 56 // Run the service 57 if err := service.Run(); err != nil { 58 log.Fatal(err) 59 } 60 } 61 ``` 62 63 ## Configure a specific broker in code 64 65 NATS: 66 ```go 67 import ( 68 "go-micro.dev/v5" 69 bnats "go-micro.dev/v5/broker/nats" 70 ) 71 72 func main() { 73 b := bnats.NewNatsBroker() 74 svc := micro.NewService(micro.Broker(b)) 75 svc.Init() 76 svc.Run() 77 } 78 ``` 79 80 RabbitMQ: 81 ```go 82 import ( 83 "go-micro.dev/v5" 84 "go-micro.dev/v5/broker/rabbitmq" 85 ) 86 87 func main() { 88 b := rabbitmq.NewBroker() 89 svc := micro.NewService(micro.Broker(b)) 90 svc.Init() 91 svc.Run() 92 } 93 ``` 94 95 ## Configure via environment 96 97 Using the built-in configuration flags/env vars (no code changes): 98 99 ```bash 100 MICRO_BROKER=nats MICRO_BROKER_ADDRESS=nats://127.0.0.1:4222 go run main.go 101 ``` 102 103 Common variables: 104 - `MICRO_BROKER`: selects the broker implementation (`http`, `nats`, `rabbitmq`, `memory`). 105 - `MICRO_BROKER_ADDRESS`: comma-separated list of broker addresses. 106 107 Notes: 108 - NATS addresses should be prefixed with `nats://`. 109 - RabbitMQ addresses typically use `amqp://user:pass@host:5672`.