Skip to content

Commit

Permalink
Merge pull request #710 from qiangdavidliu/master
Browse files Browse the repository at this point in the history
update to latest karyon3 and better integration for eureka-server-karyon3
  • Loading branch information
qiangdavidliu committed Nov 20, 2015
2 parents 7d44ab3 + 5817015 commit d4d29eb
Show file tree
Hide file tree
Showing 12 changed files with 216 additions and 116 deletions.
6 changes: 3 additions & 3 deletions build.gradle
Expand Up @@ -19,17 +19,17 @@ ext {
apacheHttpClientVersion='4.3.4'
guiceVersion='4.0'
servoVersion='0.9.4'
governatorVersion='1.10.4'
governatorVersion='1.10.5'
archaiusVersion='0.7.1'
archaius2Version='2.0.0-rc.32'
archaius2Version='2.0.0-rc.33'
blitzVersion='1.34'
mockitoVersion='1.10.19'
junit_version='4.11'
mockserverVersion='3.9.2'
jetty_version='7.2.0.v20101020'
jacksonVersion='2.5.4'
woodstoxVersion='4.4.1'
karyon3Version='3.0.1-rc.13'
karyon3Version='3.0.1-rc.23'
}

idea {
Expand Down
Expand Up @@ -50,17 +50,16 @@ public Ec2EurekaArchaius2InstanceConfig(Config config, String namespace) {
// Instance id being null means we could not get the amazon metadata
AmazonInfo amazonInfo = (AmazonInfo) info;
if (amazonInfo.get(MetaDataKey.instanceId) == null) {
if (config.getBoolean("validateInstanceId", true)) {
if (config.getBoolean(namespace + ".validateInstanceId", true)) {
throw new RuntimeException(
"Your datacenter is defined as cloud but we are not able to get the amazon metadata to "
+ "register. \nSet the property 'eureka.validateInstanceId' to false to ignore the"
+ "metadata call");
}
else {
// The property to not validate instance ids may be set for
// development and in that scenario, populate instance id
// and public hostname with the hostname of the machine
Map<String, String> metadataMap = new HashMap<String, String>();
// The property to not validate instance ids may be set for development and in that scenario,
// populate instance id and public hostname with the hostname of the machine
Map<String, String> metadataMap = new HashMap<>();
metadataMap.put(MetaDataKey.instanceId.getName(), super.getIpAddress());
metadataMap.put(MetaDataKey.publicHostname.getName(), super.getHostName(false));
amazonInfo.setMetadata(metadataMap);
Expand Down
Expand Up @@ -195,12 +195,12 @@ public boolean shouldOnDemandUpdateStatusChange() {

@Override
public String getEncoderName() {
return config.getString("encoderName");
return config.getString("encoderName", null);
}

@Override
public String getDecoderName() {
return config.getString("decoderName");
return config.getString("decoderName", null);
}

@Override
Expand All @@ -210,7 +210,7 @@ public String getClientDataAccept() {

@Override
public String getExperimental(String name) {
return config.getString("experimental." + name);
return config.getString("experimental." + name, null);
}

@Override
Expand Down

This file was deleted.

@@ -0,0 +1,58 @@
package com.netflix.discovery.guice;

import com.google.inject.AbstractModule;
import com.google.inject.Scopes;
import com.netflix.appinfo.AbstractInstanceConfig;
import com.netflix.appinfo.ApplicationInfoManager;
import com.netflix.appinfo.EurekaInstanceConfig;
import com.netflix.appinfo.InstanceInfo;
import com.netflix.appinfo.providers.EurekaConfigBasedInstanceInfoProvider;
import com.netflix.archaius.Config;
import com.netflix.discovery.DiscoveryClient;
import com.netflix.discovery.Ec2EurekaArchaius2InstanceConfig;
import com.netflix.discovery.EurekaArchaius2ClientConfig;
import com.netflix.discovery.EurekaArchaius2InstanceConfig;
import com.netflix.discovery.EurekaClient;
import com.netflix.discovery.EurekaClientConfig;
import com.netflix.discovery.shared.transport.EurekaArchaius2TransportConfig;
import com.netflix.discovery.shared.transport.EurekaTransportConfig;
import com.netflix.eventbus.impl.EventBusImpl;
import com.netflix.eventbus.spi.EventBus;

/**
* Add this module to your project to enable Eureka client and registration
*
* @author elandau
*
*/
public class Ec2EurekaClientModule extends AbstractModule {
@Override
protected void configure() {
requireBinding(Config.class);

bind(ApplicationInfoManager.class).asEagerSingleton();

// Bindings for eureka
bind(EurekaInstanceConfig.class).to(Ec2EurekaArchaius2InstanceConfig.class);
bind(AbstractInstanceConfig.class).to(Ec2EurekaArchaius2InstanceConfig.class);
bind(EurekaArchaius2InstanceConfig.class).to(Ec2EurekaArchaius2InstanceConfig.class);

bind(EurekaTransportConfig.class).to(EurekaArchaius2TransportConfig.class);
bind(EurekaClientConfig.class).to(EurekaArchaius2ClientConfig.class);

bind(InstanceInfo.class).toProvider(EurekaConfigBasedInstanceInfoProvider.class);
bind(EurekaClient.class).to(DiscoveryClient.class);

bind(EventBus.class).to(EventBusImpl.class).in(Scopes.SINGLETON);
}

@Override
public boolean equals(Object obj) {
return Ec2EurekaClientModule.class.equals(obj.getClass());
}

@Override
public int hashCode() {
return Ec2EurekaClientModule.class.hashCode();
}
}
@@ -0,0 +1,53 @@
package com.netflix.discovery.guice;

import com.google.inject.AbstractModule;
import com.google.inject.Scopes;
import com.netflix.appinfo.AbstractInstanceConfig;
import com.netflix.appinfo.ApplicationInfoManager;
import com.netflix.appinfo.EurekaInstanceConfig;
import com.netflix.appinfo.InstanceInfo;
import com.netflix.appinfo.providers.EurekaConfigBasedInstanceInfoProvider;
import com.netflix.archaius.Config;
import com.netflix.discovery.DiscoveryClient;
import com.netflix.discovery.EurekaArchaius2ClientConfig;
import com.netflix.discovery.EurekaArchaius2InstanceConfig;
import com.netflix.discovery.EurekaClient;
import com.netflix.discovery.EurekaClientConfig;
import com.netflix.discovery.shared.transport.EurekaArchaius2TransportConfig;
import com.netflix.discovery.shared.transport.EurekaTransportConfig;
import com.netflix.eventbus.impl.EventBusImpl;
import com.netflix.eventbus.spi.EventBus;

/**
* @author David Liu
*/
public class LocalDevEurekaClientModule extends AbstractModule {
@Override
protected void configure() {
requireBinding(Config.class);

bind(ApplicationInfoManager.class).asEagerSingleton();

// Bindings for eureka
bind(EurekaInstanceConfig.class).to(EurekaArchaius2InstanceConfig.class);
bind(AbstractInstanceConfig.class).to(EurekaArchaius2InstanceConfig.class);

bind(EurekaTransportConfig.class).to(EurekaArchaius2TransportConfig.class);
bind(EurekaClientConfig.class).to(EurekaArchaius2ClientConfig.class);

bind(InstanceInfo.class).toProvider(EurekaConfigBasedInstanceInfoProvider.class);
bind(EurekaClient.class).to(DiscoveryClient.class);

bind(EventBus.class).to(EventBusImpl.class).in(Scopes.SINGLETON);
}

@Override
public boolean equals(Object obj) {
return LocalDevEurekaClientModule.class.equals(obj.getClass());
}

@Override
public int hashCode() {
return LocalDevEurekaClientModule.class.hashCode();
}
}
1 change: 1 addition & 0 deletions eureka-server-karyon3/build.gradle
Expand Up @@ -3,6 +3,7 @@ apply plugin: 'jetty'

dependencies {
compile project(':eureka-core')
compile project(':eureka-client-archaius2')
runtime 'xerces:xercesImpl:2.4.0'
compile "com.netflix.governator:governator:${governatorVersion}"
compile "com.netflix.governator:governator-servlet:${governatorVersion}"
Expand Down
Expand Up @@ -2,16 +2,12 @@

import com.netflix.archaius.bridge.StaticArchaiusBridgeModule;
import com.netflix.archaius.guice.ArchaiusModule;
import com.netflix.eureka.guice.EurekaServerModule;
import com.netflix.eureka.guice.LocalEurekaServerModule;
import com.netflix.governator.GovernatorFeatures;
import com.netflix.governator.LifecycleInjector;
import com.netflix.governator.ProvisionDebugModule;
import com.netflix.governator.guice.annotations.Bootstrap;
import com.netflix.governator.guice.jetty.JettyModule;
import com.netflix.karyon.DefaultKaryonConfiguration;
import com.netflix.karyon.Karyon;
import com.netflix.karyon.archaius.ArchaiusKaryonConfiguration;
import com.netflix.karyon.ModuleListProviders;
import com.sun.jersey.api.core.PackagesResourceConfig;
import com.sun.jersey.guice.JerseyServletModule;
import com.sun.jersey.guice.spi.container.servlet.GuiceContainer;
Expand All @@ -27,49 +23,42 @@
public class EurekaInjectorCreator {
private static final Logger logger = LoggerFactory.getLogger(EurekaInjectorCreator.class);

private static final String CONFIG_NAME = "eureka-server";
private static final String NAME = "eureka-server";

public static LifecycleInjector createInjector(boolean embedded) {
try {
return Karyon.createInjector(
createInjectorBuilder(embedded).build()
);
return Karyon.forApplication(NAME)
.addAutoModuleListProvider(ModuleListProviders.forPackages("com.netflix.eureka.guice"))
.addModules(
new ArchaiusModule(),
new StaticArchaiusBridgeModule(),
new ProvisionDebugModule(),
new JerseyServletModule() {
@Override
protected void configureServlets() {
filter("/*").through(StatusFilter.class);
filter("/*").through(ServerRequestAuthFilter.class);
filter("/v2/apps", "/v2/apps/*").through(GzipEncodingEnforcingFilter.class);
//filter("/*").through(RateLimitingFilter.class); // enable if needed

// REST
Map<String, String> params = new HashMap<String, String>();
params.put(PackagesResourceConfig.PROPERTY_PACKAGES, "com.sun.jersey");
params.put(PackagesResourceConfig.PROPERTY_PACKAGES, "com.netflix");
params.put("com.sun.jersey.config.property.WebPageContentRegex", "/(flex|images|js|css|jsp)/.*");
params.put("com.sun.jersey.spi.container.ContainerRequestFilters", "com.sun.jersey.api.container.filter.GZIPContentEncodingFilter");
params.put("com.sun.jersey.spi.container.ContainerResponseFilters", "com.sun.jersey.api.container.filter.GZIPContentEncodingFilter");
filter("/*").through(GuiceContainer.class, params);
bind(GuiceContainer.class).asEagerSingleton();
}
},
embedded ? new JettyModule() : new Bootstrap.NullModule()
)
.start();
} catch (Exception e) {
logger.error("Failed to create the injector", e);
e.printStackTrace();
throw new RuntimeException(e);
}
}

private static DefaultKaryonConfiguration.Builder<?> createInjectorBuilder(boolean embedded) {
return ArchaiusKaryonConfiguration.builder()
.withConfigName(CONFIG_NAME)
.disable(GovernatorFeatures.SHUTDOWN_ON_ERROR)
.addModules(
new LocalEurekaServerModule(), // server
new ArchaiusModule(),
new StaticArchaiusBridgeModule(),
new ProvisionDebugModule(),
new JerseyServletModule() {
@Override
protected void configureServlets() {
filter("/*").through(StatusFilter.class);
filter("/*").through(ServerRequestAuthFilter.class);
filter("/v2/apps", "/v2/apps/*").through(GzipEncodingEnforcingFilter.class);
//filter("/*").through(RateLimitingFilter.class); // enable if needed

// REST
Map<String, String> params = new HashMap<String, String>();
params.put(PackagesResourceConfig.PROPERTY_PACKAGES, "com.sun.jersey");
params.put(PackagesResourceConfig.PROPERTY_PACKAGES, "com.netflix");
params.put("com.sun.jersey.config.property.WebPageContentRegex", "/(flex|images|js|css|jsp)/.*");
params.put("com.sun.jersey.spi.container.ContainerRequestFilters", "com.sun.jersey.api.container.filter.GZIPContentEncodingFilter");
params.put("com.sun.jersey.spi.container.ContainerResponseFilters", "com.sun.jersey.api.container.filter.GZIPContentEncodingFilter");
filter("/*").through(GuiceContainer.class, params);
bind(GuiceContainer.class).asEagerSingleton();
}
},
embedded ? new JettyModule() : new Bootstrap.NullModule()
);
}
}
@@ -0,0 +1,19 @@
package com.netflix.eureka.guice;

import com.netflix.karyon.conditional.ConditionalOnEc2;

/**
* @author David Liu
*/
@ConditionalOnEc2
public class Ec2EurekaClientModule extends com.netflix.discovery.guice.Ec2EurekaClientModule {
@Override
public boolean equals(Object obj) {
return Ec2EurekaClientModule.class.equals(obj.getClass());
}

@Override
public int hashCode() {
return Ec2EurekaClientModule.class.hashCode();
}
}
Expand Up @@ -2,29 +2,27 @@

import com.google.inject.AbstractModule;
import com.google.inject.Scopes;
import com.netflix.discovery.guice.EurekaModule;
import com.netflix.eureka.DefaultEurekaServerConfig;
import com.netflix.eureka.DefaultEurekaServerContext;
import com.netflix.eureka.EurekaServerConfig;
import com.netflix.eureka.EurekaServerContext;
import com.netflix.eureka.aws.AwsBinderDelegate;
import com.netflix.eureka.aws.EIPManager;
import com.netflix.eureka.cluster.PeerEurekaNodes;
import com.netflix.eureka.registry.AbstractInstanceRegistry;
import com.netflix.eureka.registry.AwsInstanceRegistry;
import com.netflix.eureka.registry.InstanceRegistry;
import com.netflix.eureka.registry.PeerAwareInstanceRegistry;
import com.netflix.eureka.resources.DefaultServerCodecs;
import com.netflix.eureka.resources.ServerCodecs;
import com.netflix.karyon.conditional.ConditionalOnEc2;

/**
* @author David Liu
*/
public class EurekaServerModule extends AbstractModule {
@ConditionalOnEc2
public class Ec2EurekaServerModule extends AbstractModule {
@Override
protected void configure() {
install(new EurekaModule());

bind(EurekaServerConfig.class).to(DefaultEurekaServerConfig.class).in(Scopes.SINGLETON);
bind(PeerEurekaNodes.class).in(Scopes.SINGLETON);

Expand All @@ -40,4 +38,14 @@ protected void configure() {

bind(EurekaServerContext.class).to(DefaultEurekaServerContext.class).in(Scopes.SINGLETON);
}

@Override
public boolean equals(Object obj) {
return Ec2EurekaServerModule.class.equals(obj.getClass());
}

@Override
public int hashCode() {
return Ec2EurekaServerModule.class.hashCode();
}
}

0 comments on commit d4d29eb

Please sign in to comment.