Hello!
For PR#3100 (Fixes #3017<https://github.com/apache/incubator-shenyu/issues/3017> ) is described below, please review the code. thank! Existing service registration and deregistration processing and problems: 1. For the use of the registry, when there is a service started and shutdown, all available services will be queried from the registry during registration processing, and event messages will be published for service registration. 2. For http registration, when a service is started and shutdown, the service can only be registered. 3. The event subscriber is not sure what the service register type. When a service is registered, the list of services in the event message is processed, the list of services in the DB is queried, the list of services in the event message is compared with the list of services in the DB, and the services that do not exist in the former are added to the latter to achieve the purpose of service registration. However, the stopped service is not removed from the DB list, and if there is a service offline, the gateway will still send the request to the node. 4. Http registration, after the service shutdown, the dependent heartbeat check finds that the service is unavailable, and then removes it from the upstream service list. There is a timely removal that causes the gateway to send requests to the downed node. Modification Notes: 1. Active deregistration when the http service is stopped, EventType=DELETED. Http registration and use registry registration to differentiate processing. 2. Set the status for the upstream service, when the service is registered, set the status of the service list in the DB according to the service list in the event message, and record the service status change time. Set status false when the service deregistration. When the service changes or the admin starts, the service that is unavailable for more than 1 hour is removed to avoid the zombie service from existing in the DB all the time. 3. The new services and services with changed status are handed over to the http registrar for processing. 4. If it is http registration, the http registrar adds the service to the service list according to the service status, or removes it from the service list, and then updates the DB and sync to the service list cache. Service registration processing ended. 5. Non-http registration continues to be processed. If the service is logged off, remove the service from the DB service list as the list of available services (the current non-http registration does not exist, the logic is retained, and can be removed), otherwise the service in the event message is used as the list of available services. Based on the list of available services and db services, generate the final service list, update the DB and sync to the service list cache. _______________________________________ Jerbo99
