Merge branch 'publish-eureka-events'
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
package org.springframework.platform.netflix.eureka.event;
|
||||
|
||||
import com.netflix.appinfo.InstanceInfo;
|
||||
import lombok.Data;
|
||||
import org.springframework.context.ApplicationEvent;
|
||||
|
||||
@@ -8,15 +9,13 @@ import org.springframework.context.ApplicationEvent;
|
||||
*/
|
||||
@Data
|
||||
public class EurekaInstanceRegisteredEvent extends ApplicationEvent {
|
||||
private String appName;
|
||||
private String vip;
|
||||
private InstanceInfo instanceInfo;
|
||||
private int leaseDuration;
|
||||
boolean replication;
|
||||
|
||||
public EurekaInstanceRegisteredEvent(Object source, String appName, String vip, int leaseDuration, boolean replication) {
|
||||
public EurekaInstanceRegisteredEvent(Object source, InstanceInfo instanceInfo, int leaseDuration, boolean replication) {
|
||||
super(source);
|
||||
this.appName = appName;
|
||||
this.vip = vip;
|
||||
this.instanceInfo = instanceInfo;
|
||||
this.leaseDuration = leaseDuration;
|
||||
this.replication = replication;
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package org.springframework.platform.netflix.eureka.event;
|
||||
|
||||
import com.netflix.appinfo.InstanceInfo;
|
||||
import lombok.Data;
|
||||
import org.springframework.context.ApplicationEvent;
|
||||
|
||||
@@ -10,12 +11,14 @@ import org.springframework.context.ApplicationEvent;
|
||||
public class EurekaInstanceRenewedEvent extends ApplicationEvent {
|
||||
private String appName;
|
||||
private String serverId;
|
||||
private InstanceInfo instanceInfo;
|
||||
boolean replication;
|
||||
|
||||
public EurekaInstanceRenewedEvent(Object source, String appName, String serverId, boolean replication) {
|
||||
public EurekaInstanceRenewedEvent(Object source, String appName, String serverId, InstanceInfo instanceInfo, boolean replication) {
|
||||
super(source);
|
||||
this.appName = appName;
|
||||
this.serverId = serverId;
|
||||
this.instanceInfo = instanceInfo;
|
||||
this.replication = replication;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,12 +1,22 @@
|
||||
package org.springframework.platform.netflix.eureka.event;
|
||||
|
||||
import com.google.common.base.Optional;
|
||||
import com.google.common.base.Predicate;
|
||||
import com.netflix.appinfo.InstanceInfo;
|
||||
import com.netflix.discovery.DiscoveryManager;
|
||||
import com.netflix.discovery.shared.Application;
|
||||
import com.netflix.eureka.PeerAwareInstanceRegistry;
|
||||
import com.netflix.eureka.lease.LeaseManager;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.ApplicationContext;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.List;
|
||||
|
||||
import static com.google.common.collect.Iterables.*;
|
||||
|
||||
/**
|
||||
* @author Spencer Gibb
|
||||
*/
|
||||
@@ -21,8 +31,7 @@ public class LeaseManagerMessageBroker implements LeaseManager<InstanceInfo> {
|
||||
logger.debug("register {}, vip {}, leaseDuration {}, isReplication {}",
|
||||
info.getAppName(), info.getVIPAddress(), leaseDuration, isReplication);
|
||||
//TODO: what to publish from info (whole object?)
|
||||
ctxt.publishEvent(new EurekaInstanceRegisteredEvent(this, info.getAppName(),
|
||||
info.getVIPAddress(), leaseDuration, isReplication));
|
||||
ctxt.publishEvent(new EurekaInstanceRegisteredEvent(this, info, leaseDuration, isReplication));
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -33,9 +42,25 @@ public class LeaseManagerMessageBroker implements LeaseManager<InstanceInfo> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean renew(String appName, String serverId, boolean isReplication) {
|
||||
public boolean renew(final String appName, final String serverId, boolean isReplication) {
|
||||
logger.debug("renew {}, serverId {}, isReplication {}", appName, serverId, isReplication);
|
||||
ctxt.publishEvent(new EurekaInstanceRenewedEvent(this, appName, serverId, isReplication));
|
||||
List<Application> applications = PeerAwareInstanceRegistry.getInstance().getSortedApplications();
|
||||
Optional<Application> app = tryFind(applications, new Predicate<Application>() {
|
||||
@Override
|
||||
public boolean apply(@Nullable Application input) {
|
||||
return input.getName().equals(appName);
|
||||
}
|
||||
});
|
||||
|
||||
if (app.isPresent()) {
|
||||
Optional<InstanceInfo> info = tryFind(app.get().getInstances(), new Predicate<InstanceInfo>() {
|
||||
@Override
|
||||
public boolean apply(@Nullable InstanceInfo input) {
|
||||
return input.getHostName().equals(serverId);
|
||||
}
|
||||
});
|
||||
ctxt.publishEvent(new EurekaInstanceRenewedEvent(this, appName, serverId, info.orNull(), isReplication));
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user