title: Protobuf3: extending type support
body: <p>My company is consider using protobuf3 as an message communication schema between our many microservices, and we struggle with find a solution for information lost when handling a message that transfer between more then 2 services and have more then one version, and I'll explain by writing an example:</p>
  <p>I have three microservices, A,B,C that communicate with each other using the same schema:</p>
  <pre><code>message FooV1 {
    int32 x = 1;
  }
  </code></pre>
  <p>Where A send messages to B, B alter the messages and send the result to C (A-&gt;B-&gt;C).
  Now let's say I alter the schema and add another field:</p>
  <pre><code>message FooV2 {
    int32 x = 1;
    int32 y = 2;
  }
  </code></pre>
  <p>Then, I update only services A and C with the new schema, and B will remain with the old schema, like this: A:V2, B:V1, C:V2.</p>
  <p>Supposed A send <code>x=1</code> and <code>y=2</code> to B. B knows only tag 1, so he don't parse y at all. Then he alter <code>x</code> by changing it, for instance, to be 0. Then B send it to C. C now get <code>x</code> that equal to 0, but in the process <code>y</code> is 'vanished' and even though A and C both support the new schema, and B doesn't care about <code>y</code>, we still lose data in the process.</p>
  <p>I want C to know <code>y</code> even thought B doesn't recognize <code>y</code>
  Is there any way to tell protobuf that even thought the service won't parse an unknown tag he won't get rid of the data but append it back to the message on sending? If there is a way to do that, how does it work? Thanks.</p>