如何在开发中使用Spring Cloud和Docker Machine

时间:2016-02-19 17:46:24

标签: spring spring-boot

我试图从IntelliJ中运行我的Spring Boot应用程序(APP1),并使用另一个Spring Boot应用程序(APP2)中的服务作为Docker Machine VM中的容器运行(就像我在Windows上一样) )。本地运行的应用程序通过Consul发现容器化应用程序,因为这两个应用程序都通过Spring Cloud Consul与它集成。

不幸的是,为容器化应用程序提供给本地应用程序的IP地址是容器与VM的私有IP。因此,本地应用无法连接到它。例如

APP1        ->   Docker Machine    ->     APP2
10.13.1.84       192.168.99.100           172.28.0.5

到目前为止,唯一的方法是创建一个方面来拦截框架返回的服务器地址:

@Profile("development")
@Component
@Aspect
@Slf4j
public class DockerMachineConsulServerListAdvice {

    @Around("execution(*  org.springframework.cloud.netflix.feign.ribbon.CachingSpringLoadBalancerFactory.create(..))")
    public Object updateHost(ProceedingJoinPoint pjp) throws Throwable {

        Object retVal = pjp.proceed();

        if (retVal instanceof FeignLoadBalancer) {

            FeignLoadBalancer lb = (FeignLoadBalancer) retVal;

            List<Server> servers = lb.getLoadBalancer().getServerList(false).stream()
                .map(server -> new Server("192.168.99.100", server.getPort())).collect(Collectors.toList());

            DynamicServerListLoadBalancer dslb = (DynamicServerListLoadBalancer) lb.getLoadBalancer();
            dslb.setServersList(servers);

        }

        return retVal;

    }

}

我试图通过覆盖各种bean来解决如何配置Spring Cloud框架但是失败了(因为使用方面非常讨厌)。任何想法如何以更好的方式做到这一点?

由于

尼克

0 个答案:

没有答案