Build messages without the signature, key, from and seqno fields.
The corresponding protobuf key-value pairs are absent from the marshalled message, not just empty.
On the consuming side:
Enforce the fields to be absent, reject otherwise.
Propagate only if the fields are absent, reject otherwise.
A message_id function will not be able to use the above fields, and should instead rely on the data field. A commonplace strategy is to calculate a hash.
On the producing side:
On the consuming side: