如何解决如何在运行时更新undertow配置?
首先,请原谅我的英语不好。
嗨,我正在使用Spring Boot和Undertow开发小型反向代理服务器。
我正在使用如下所示的注册WebServerFactoryCustomizer运行应用程序
@Component
public class MyWebServerFactoryCustomizer implements WebServerFactoryCustomizer<UndertowServletWebServerFactory> {
private final Environment env;
private final HandlerLookupService handlerLookupService;
@Override
public void customize(UndertowServletWebServerFactory factory) {
factory.addBuilderCustomizers(builder -> builder
.setDirectBuffers(//blah blah)
.setServerOption(//blah blah)
.setSocketoption(//blah blah)
.addHttpsListener(//blah blah)
.setWorkerThreads(200));
factory.addDeploymentInfoCustomizers(
deploymentInfo -> deploymentInfo.addInitialHandlerChainWrapper(
handler -> handlerLookupService.getRootHandler()
));
factory.addErrorPages(new ErrorPage(HttpStatus.INTERNAL_SERVER_ERROR,"/error"));
}
}
属性(包括目标服务器地址,重试策略等)写入应用程序yml文件中,并与Spring Cloud配置服务器同步。
注入的HandlerLookupService实例使用该属性。
@ConfigurationProperties(prefix = "gateway.application")
public class ApplicationProps {
private String name;
private List<Map<String,Object>> props;
private List<ReverseProxyGroup> reverseProxyGroup;
private Map<String,String> authorization;
///
@Data
public static class ReverseProxyGroup {
private String name;
private String myHostName;
private String scheme = "http://";
private int port = 8080;
private boolean legacy = false;
private String hostName;
private int problemServerRetry;
private int connectionsPerThread;
private int maxRequestTime;
private int maxQueueSize;
.........
}
@Data
public static class ReverseProxy {
private int weight;
private String group;
// http://10.22.222.112
private String lvsServer;
private List<String> servers;
}
@Data
public static class Routing {
private String target;
private List<String> pattern;
}
}
@Override
public HttpHandler getRootHandler() {
NameVirtualHostHandler handler =
Handlers.virtualHost(new PathHandler(getVirtualHostHandler())); // http://www.localhost:8080/metrics
applicationProps.getReverseProxyGroup().forEach(group -> {
ProxyWrapper proxyWrapper = handlerFactory.getProxyHandler(group);
map.put(group.getName(),proxyWrapper);
});
applicationProps.getReverseProxyGroup().forEach(group -> {
handler.addHost(group.getMyHostName(),new TimingHttpHandler(getHandler(group),group.getHostName()));
});
handler.addHost("mydomain.com",getAdminHandler());
return handler;
}
因此,我想在运行时通过更改配置服务器的属性来更新我的反向代理服务器配置(例如,删除一些目标服务器或添加)。
我认为可以通过在Spring Boot应用程序类上添加@EventListener来接收 RefreshScopeRefreshedEvent ,但是在事件实例中没有任何用处。
有人可以帮助我吗?谢谢。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。