Skip to content

Instantly share code, notes, and snippets.

@PierreBesson
Created September 25, 2017 12:53
Show Gist options
  • Save PierreBesson/3ee939cd2cb8bbe37c63eee185d9c010 to your computer and use it in GitHub Desktop.
Save PierreBesson/3ee939cd2cb8bbe37c63eee185d9c010 to your computer and use it in GitHub Desktop.
Eureka microservice manual registration
spring:
cloud:
service-registry:
auto-registration:
enabled: false
@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();
}
}
@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