code: func (p *ExamplePlugin) etcdPublisher() {
  	// Wait for the consumer to initialize
  	time.Sleep(1 * time.Second)
  
  	p.Log.Print("KeyValPublisher started")
  
  	// Convert data into the proto format.
  	exampleData := p.buildData("string1", 0, true)
  
  	// PUT: demonstrate how to use the Data Broker Put() API to store
  	// a simple data structure into ETCD.
  	label := etcdKeyPrefixLabel(p.ServiceLabel.GetAgentLabel(), "index")
  	p.Log.Infof("Write data to %v", label)
  	if err := p.Publisher.Put(label, exampleData); err != nil {
  		p.Log.Fatal(err)
  	}
  
  	// Prepare different set of data.
  	p.Log.Infof("Update data at %v", label)
  	exampleData = p.buildData("string2", 1, false)
  
  	// UPDATE: demonstrate how use the Data Broker Put() API to change
  	// an already stored data in ETCD.
  	if err := p.Publisher.Put(label, exampleData); err != nil {
  		p.Log.Fatal(err)
  	}
  
  	// Prepare another different set of data.
  	p.Log.Infof("Update data at %v", label)
  	exampleData = p.buildData("string3", 2, false)
  
  	// UPDATE: only to demonstrate Unregister functionality
  	if err := p.Publisher.Put(label, exampleData); err != nil {
  		p.Log.Fatal(err)
  	}
  
  	// Wait for the consumer (change should not be passed to listener)
  	time.Sleep(2 * time.Second)
  	p.publisherDone = true
  }
docs: // etcdPublisher creates a simple data, then demonstrates CREATE and UPDATE
  // operations with ETCD.