From what I know this isn't possible in a way you've described.
Service Fabric service can be shutdown by multiple reasons: re-balancing, errors, outage, upgrade etc. Depending on the type of service (stateful or stateless) they have slightly different shutdown routine (see more) but in general if the service replica
is shutdown gracefully then OnCloseAsync
method is invoked. Inside this method replica
can perform a safe cleanup. There is also a second case - when replica is forcibly terminated. Then OnAbort
method is called and there are no clear statements in documentation about guarantees you have inside OnAbort
method.
Going back to your case I can suggest the following pattern:
- When
replica
is going to shutdown inside OnCloseAsync
or OnAbort
it calls lbservice
and reports that it is going to shutdown.
- The
lbservice
the reconfigure load balancer to exclude this replica
from request processing.
replica
completes all already processing requests and shutdown.
Please note that you would need to implement startup mechanism too i.e. when replica
is started then it reports to lbservice
that it is active now.
In a mean time I like to notice that Service Fabric already implements this mechanics. Here is an example of how API Management can be used with Service Fabric and here is an example of how Reverse Proxy can be used to access Service Fabric services from the outside.
EDIT 2018-10-08
In order to abstract receive notifications about services endpoints changes in general you can try to use FabricClient.ServiceManagementClient.ServiceNotificationFilterMatched Event.
There is a similar situation solved in this question.