Forked from PierreBesson/InstanceRegistrationResource.java
Created
May 6, 2024 04:07
-
-
Save sweetcard/cbeccb42949c9dacd61c3a695baec1b0 to your computer and use it in GitHub Desktop.
Eureka microservice manual registration
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
spring: | |
cloud: | |
service-registry: | |
auto-registration: | |
enabled: false |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@RestController | |
@RequestMapping("registration") | |
public class InstanceRegistrationResource { | |
private final InstanceRegistrationService instanceRegistrationService; | |
public InstanceRegistrationResource(InstanceRegistrationService instanceRegistrationService) { | |
this.instanceRegistrationService = instanceRegistrationService; | |
} | |
@PostMapping("register") | |
public void registerInstance() { | |
instanceRegistrationService.registerInstance("UP"); | |
} | |
@PostMapping("register/{status}") | |
public InstanceInfo registerInstanceWithCustomStatus(@PathVariable("status") InstanceInfo.InstanceStatus status) { | |
return instanceRegistrationService.registerInstance(status.toString()); | |
} | |
@PostMapping("set-status/{status}") | |
public InstanceInfo setInstanceStatus(@PathVariable("status") InstanceInfo.InstanceStatus status) { | |
return instanceRegistrationService.setStatus(status.toString()); | |
} | |
@PostMapping("deregister") | |
public InstanceInfo deregisterInstance() throws InterruptedException { | |
return instanceRegistrationService.deregisterInstance(); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@Service | |
public class InstanceRegistrationService implements ApplicationContextAware { | |
private EurekaRegistration registration; | |
private final ServiceRegistry<EurekaRegistration> serviceRegistry; | |
private final EurekaInstanceConfigBean eurekaInstanceConfigBean; | |
private final ApplicationInfoManager applicationInfoManager; | |
private final EurekaClient eurekaClient; | |
private final EurekaHealthCheckHandler eurekaHealthCheckHandler; | |
private final DiscoveryClient discoveryClient; | |
@Autowired | |
public InstanceRegistrationService(ServiceRegistry<EurekaRegistration> serviceRegistry, @Autowired(required = false) EurekaRegistration registration, EurekaInstanceConfigBean eurekaInstanceConfigBean, ApplicationInfoManager applicationInfoManager, EurekaClient eurekaClient, EurekaHealthCheckHandler eurekaHealthCheckHandler, DiscoveryClient discoveryClient) { | |
this.serviceRegistry = serviceRegistry; | |
this.registration = registration; | |
this.eurekaInstanceConfigBean = eurekaInstanceConfigBean; | |
this.applicationInfoManager = applicationInfoManager; | |
this.eurekaClient = eurekaClient; | |
this.eurekaHealthCheckHandler = eurekaHealthCheckHandler; | |
this.discoveryClient = discoveryClient; | |
} | |
InstanceInfo registerInstance(String status) { | |
EurekaRegistration newRegistration = EurekaRegistration.builder(eurekaInstanceConfigBean) | |
.with(applicationInfoManager) | |
.with(eurekaClient) | |
.with(eurekaHealthCheckHandler) | |
.build(); | |
serviceRegistry.register(newRegistration); | |
serviceRegistry.setStatus(newRegistration, status); | |
this.registration = newRegistration; | |
return newRegistration.getApplicationInfoManager().getInfo(); | |
} | |
InstanceInfo deregisterInstance() throws InterruptedException { | |
serviceRegistry.setStatus(registration, "OUT_OF_SERVICE"); | |
// Give time for the OUT_OF_SERVICE status to propagate to all instances before shutdown | |
Thread.sleep(60000L); | |
serviceRegistry.deregister(registration); | |
return registration.getApplicationInfoManager().getInfo(); | |
} | |
InstanceInfo setStatus(String status) { | |
if (registration != null) { | |
serviceRegistry.setStatus(registration, status); | |
return registration.getApplicationInfoManager().getInfo(); | |
} else { | |
return null; | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment