If there were a single handshake when the connection between a client (AF) and Axon Server is established, a lot of useful information could be exchanged.
Cluster information, per-node or cluster current load, node addresses, contexts. One of the interesting points that could be exchanged would be a Feature set, or which features are supported by a given client/server.
For example:
Client connects to a Server node and introduces itself, with app name, version, framework version and a supported feature set. Supports heartbeat and featureX and featureY.
Server responds with Cluster info, information about the node itself (labels etc), and with it's own supported feature set. In this example, the server can respond that it supports heartbeat, featureX, featureZ, featureS, but doesn't support featureY.
After that both client and server(node) agree to use Heartbeat and FeatureX.
There could be more variations to level of detail and requirements (and complexity) with required features, optional features, enabled features, supported but not active etc. This would be a more powerful mechanism to introduce and deprecate/remove features in mixed version deployments, than to rely on just versions. Relying only on versions requires extensive checks and compatibility comparison.
If there were a single handshake when the connection between a client (AF) and Axon Server is established, a lot of useful information could be exchanged. Cluster information, per-node or cluster current load, node addresses, contexts. One of the interesting points that could be exchanged would be a Feature set, or which features are supported by a given client/server.
For example:
After that both client and server(node) agree to use Heartbeat and FeatureX. There could be more variations to level of detail and requirements (and complexity) with required features, optional features, enabled features, supported but not active etc. This would be a more powerful mechanism to introduce and deprecate/remove features in mixed version deployments, than to rely on just versions. Relying only on versions requires extensive checks and compatibility comparison.