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`.