I use a fixed pipeline that is only responsible for decoding / encoding requests / responses (and optional aggregation, compression, static headers, etc.).
The last handler in the pipeline goes to a custom RequestResolver (common for supporting non-HTTP types), which looks something like this:
public interface RequestResolver<T> {
void execute(@Nonnull ChannelHandlerContext ctx, @Nonnull T req);
}
The request responder is responsible for deciding how to process the request (i.e., if necessary, route it), and usually proceeds to one or more of the actions registered on it or returns 404. It has nothing to do with such a pipeline, except that it accepts ctx with which it is necessary to respond to requests in the queue.
Netty 4 , -01, , RequestResolver Java, Clojure, Clout Compojure.