2

我一直在将 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 不再过滤它们。我错过了什么吗?

4

1 回答 1

1

尝试使用FilterFileManager。据我了解,ZuulFilterPoller 将过滤器从 Cassandra 保存到磁盘,然后 FilterFileManager 使它们工作。

于 2015-08-27T15:43:42.457 回答