code: func (h *grpcHandler) Publish(ctx context.Context, msg *proto.Message) (*proto.Empty, error) {
  	if len(msg.Topic) == 0 {
  		return nil, merr.InternalServerError("go.micro.broker", "Topic not found")
  	}
  
  	m := &broker.Message{
  		Header: msg.Header,
  		Body:   msg.Body,
  	}
  
  	p := &grpcPublication{m: m, t: msg.Topic}
  
  	h.g.RLock()
  	for _, subscriber := range h.g.subscribers[msg.Topic] {
  		if msg.Id == subscriber.id {
  			// sub is sync; crufty rate limiting
  			// so we don't hose the cpu
  			subscriber.fn(p)
  		}
  	}
  	h.g.RUnlock()
  	return new(proto.Empty), nil
  }
docs: // The grpc handler