github.com/vmware/transport-go@v1.3.4/bridge/example_connector_broker_tcp_test.go (about)

     1  // Copyright 2019-2020 VMware, Inc.
     2  // SPDX-License-Identifier: BSD-2-Clause
     3  
     4  package bridge_test
     5  
     6  import (
     7  	"fmt"
     8  	"github.com/vmware/transport-go/bridge"
     9  	"github.com/vmware/transport-go/bus"
    10  )
    11  
    12  func Example_connectUsingBrokerViaTCP() {
    13  
    14  	// get a reference to the event bus.
    15  	b := bus.GetBus()
    16  
    17  	// create a broker connector configuration, using WebSockets.
    18  	// Make sure you have a STOMP TCP server running like RabbitMQ
    19  	config := &bridge.BrokerConnectorConfig{
    20  		Username:   "guest",
    21  		Password:   "guest",
    22  		ServerAddr: ":61613",
    23  		STOMPHeader: map[string]string{
    24  			"access-token": "test",
    25  		},
    26  	}
    27  
    28  	// connect to broker.
    29  	c, err := b.ConnectBroker(config)
    30  	if err != nil {
    31  		fmt.Printf("unable to connect, error: %e", err)
    32  	}
    33  	defer c.Disconnect()
    34  
    35  	// subscribe to our demo simple-stream
    36  	s, _ := c.Subscribe("/queue/sample")
    37  
    38  	// set a counter
    39  	n := 0
    40  
    41  	// create a control chan
    42  	done := make(chan bool)
    43  
    44  	// listen for messages
    45  	var consumer = func() {
    46  		for {
    47  			// listen for incoming messages from subscription.
    48  			m := <-s.GetMsgChannel()
    49  			n++
    50  
    51  			// get byte array.
    52  			d := m.Payload.([]byte)
    53  
    54  			fmt.Printf("Message Received: %s\n", string(d))
    55  			// listen for 5 messages then stop.
    56  			if n >= 5 {
    57  				break
    58  			}
    59  		}
    60  		done <- true
    61  	}
    62  
    63  	// send messages
    64  	var producer = func() {
    65  		for i := 0; i < 5; i++ {
    66  			c.SendMessage("/queue/sample", "text/plain", []byte(fmt.Sprintf("message: %d", i)))
    67  		}
    68  	}
    69  
    70  	// listen for incoming messages on subscription for destination /queue/sample
    71  	go consumer()
    72  
    73  	// send some messages to the broker on destination /queue/sample
    74  	go producer()
    75  
    76  	// wait for messages to be processed.
    77  	<-done
    78  }