github.com/micro/go-micro/examples@v0.0.0-20210105173217-bf4ab679e18b/broker/main.go (about)

     1  package main
     2  
     3  import (
     4  	"fmt"
     5  	"log"
     6  	"time"
     7  
     8  	"github.com/micro/go-micro/v2/broker"
     9  	"github.com/micro/go-micro/v2/config/cmd"
    10  )
    11  
    12  var (
    13  	topic = "go.micro.topic.foo"
    14  )
    15  
    16  func pub() {
    17  	tick := time.NewTicker(time.Second)
    18  	i := 0
    19  	for _ = range tick.C {
    20  		msg := &broker.Message{
    21  			Header: map[string]string{
    22  				"id": fmt.Sprintf("%d", i),
    23  			},
    24  			Body: []byte(fmt.Sprintf("%d: %s", i, time.Now().String())),
    25  		}
    26  		if err := broker.Publish(topic, msg); err != nil {
    27  			log.Printf("[pub] failed: %v", err)
    28  		} else {
    29  			fmt.Println("[pub] pubbed message:", string(msg.Body))
    30  		}
    31  		i++
    32  	}
    33  }
    34  
    35  func sub() {
    36  	_, err := broker.Subscribe(topic, func(p broker.Event) error {
    37  		fmt.Println("[sub] received message:", string(p.Message().Body), "header", p.Message().Header)
    38  		return nil
    39  	})
    40  	if err != nil {
    41  		fmt.Println(err)
    42  	}
    43  }
    44  
    45  func main() {
    46  	cmd.Init()
    47  
    48  	if err := broker.Init(); err != nil {
    49  		log.Fatalf("Broker Init error: %v", err)
    50  	}
    51  	if err := broker.Connect(); err != nil {
    52  		log.Fatalf("Broker Connect error: %v", err)
    53  	}
    54  
    55  	go pub()
    56  	go sub()
    57  
    58  	<-time.After(time.Second * 10)
    59  }