从 Cassandra 中提取的 Netflix Zuul 过滤器无法正常工作
Netflix Zuul filters pulled from Cassandra not working
我一直在将 Zuul 与其他 Netflix OSS 软件(如 Eureka、Hystrix 等)结合使用。起初,我能够创建自己的过滤器并使其在文件系统中运行。然后,我想使用 ZuulFilterDAOCassandra API 来从 Cassandra 数据库中提取过滤器。问题是我无法让它工作。
我已经将我使用的 Java 过滤器从文件系统转换为 Groovy 过滤器,并使用 ZuulFilterDAO.addFilter()
方法将其添加到 Cassandra,并使用 [=13] 激活它=]。之后,我启动 ZuulFilterPoller
以开始从数据库中提取过滤器(如果已经有的话)。对于数据库 table 模型,我通过查看 FilterInfo
对象及其属性以及 ZuulFilterDAOCassandra.addFilter()
方法来假设它。
下面是一段更完整的代码:
ZuulFilterDAO dao = new ZuulFilterDAOCassandra(keyspace);
try {
FilterInfo fi = dao.addFilter(code, "pre", "testFilter", "false", "1");
dao.setFilterActive(fi.getFilterName(), 1); // 1 is the filter revision
ZuulFilterPoller.start(dao);
} catch (Exception e) {
// Logging
}
// Show every active filter
List<FilterInfo> allActiveFilters = dao.getAllActiveFilters();
for (FilterInfo fi : allActiveFilters) {
LOG.info("FilterName: " + fi.getFilterName()); // outputs : FilterName: testFilter
}
在 Zuul 控制台中,我还得到以下信息:
adding filter to diskFilterInfo{filter_id='zuul-server:testFilter:pre',
filter_name='testFilter', filter_type='pre', revision=1, creationDate=/*date*/,
isActive=true, isCanary=false, application_name=zuul-server}
filter written testFilter.groovy
然后我可以编辑项目根目录下的 testFilter.groovy,其中包含我在 dao.addFilter()
方法中提到的代码。我知道代码正在运行,因为它在从 FS 中提取过滤器时起作用。而且,在添加过滤器时,FilterVerifier
.
会验证代码
当我将我的 http 请求发送到我的应用程序时,Zuul 不再过滤它们。我错过了什么吗?
尝试使用 FilterFileManager。我的理解是 ZuulFilterPoller 将过滤器从 Cassandra 保存到磁盘,然后 FilterFileManager 使它们工作。
我一直在将 Zuul 与其他 Netflix OSS 软件(如 Eureka、Hystrix 等)结合使用。起初,我能够创建自己的过滤器并使其在文件系统中运行。然后,我想使用 ZuulFilterDAOCassandra API 来从 Cassandra 数据库中提取过滤器。问题是我无法让它工作。
我已经将我使用的 Java 过滤器从文件系统转换为 Groovy 过滤器,并使用 ZuulFilterDAO.addFilter()
方法将其添加到 Cassandra,并使用 [=13] 激活它=]。之后,我启动 ZuulFilterPoller
以开始从数据库中提取过滤器(如果已经有的话)。对于数据库 table 模型,我通过查看 FilterInfo
对象及其属性以及 ZuulFilterDAOCassandra.addFilter()
方法来假设它。
下面是一段更完整的代码:
ZuulFilterDAO dao = new ZuulFilterDAOCassandra(keyspace);
try {
FilterInfo fi = dao.addFilter(code, "pre", "testFilter", "false", "1");
dao.setFilterActive(fi.getFilterName(), 1); // 1 is the filter revision
ZuulFilterPoller.start(dao);
} catch (Exception e) {
// Logging
}
// Show every active filter
List<FilterInfo> allActiveFilters = dao.getAllActiveFilters();
for (FilterInfo fi : allActiveFilters) {
LOG.info("FilterName: " + fi.getFilterName()); // outputs : FilterName: testFilter
}
在 Zuul 控制台中,我还得到以下信息:
adding filter to diskFilterInfo{filter_id='zuul-server:testFilter:pre',
filter_name='testFilter', filter_type='pre', revision=1, creationDate=/*date*/,
isActive=true, isCanary=false, application_name=zuul-server}
filter written testFilter.groovy
然后我可以编辑项目根目录下的 testFilter.groovy,其中包含我在 dao.addFilter()
方法中提到的代码。我知道代码正在运行,因为它在从 FS 中提取过滤器时起作用。而且,在添加过滤器时,FilterVerifier
.
当我将我的 http 请求发送到我的应用程序时,Zuul 不再过滤它们。我错过了什么吗?
尝试使用 FilterFileManager。我的理解是 ZuulFilterPoller 将过滤器从 Cassandra 保存到磁盘,然后 FilterFileManager 使它们工作。