How to do routing and avoid deserialization in Grpc / Protobuf?

1.3k views Asked by At

In our Java app we need to accept a (large) Grpc message, extract a field, and then based on the value of that field forward the message on to another server.

I'm trying to avoid the overhead of completely deserializing the message before passing it on.

One way to do this would be to send the field as a separate query or header parameter, but Grpc doesn't support them.

Another way would be to extract just the field of interest from the payload, but Protobuf doesn't support partial or selective deserialization.

How else can I do this?

1

There are 1 answers

0
Carl Mastrangelo On

One way you can do this is by doing it on the server side. When the server is about to send a response, it can extract the field and set it as part of the initial headers sent. You can do this by using a ServerInterceptor to extract the field that you want from the response and add it to the Metadata.

Aside from that, Protocol buffers currently require that you parse the message before accessing the internal fields.