我一直在将 Zuul 与其他 Netflix OSS 软件(如 Eureka、Hystrix 等)结合使用。起初,我能够创建自己的过滤器并使其在文件系统中工作。然后,我想使用 ZuulFilterDAOCassandra API 来从 Cassandra 数据库中提取过滤器。问题是我无法让它工作。
我已经将我使用的 Java 过滤器从 FileSystem 转换为 Groovy 过滤器,并使用该方法将其添加到 Cassandra ZuulFilterDAO.addFilter()
,并使用 . 激活它ZuulFilterDAO.setFilterActive()
。之后,我开始ZuulFilterPoller
从数据库中提取过滤器,如果它已经有的话. 对于数据库表模型,我通过查看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 不再过滤它们。我错过了什么吗?