Я использую библиотеки библиотеки Hystrix Netflix, чтобы выступать в качестве автоматического выключателя при подключении к удаленным службам в клиенте REST, который я создаю. Я хотел бы настроить мониторинг потока событий и мониторинга панели мониторинга через библиотеки, которые они предоставляют. Посмотрев на их пример приложения here, кажется, что мне нужно применить свои сервлет-фильтры и классы сервлета к моему веб-приложению.Использование Hystrix Java Servlet & Servlet Filter в Джерси 2
Я использую Spring Boot с Джерси 2 и подключаю свои ресурсы и фильтры в файле JerseyConfig.java (без web.xml). Я знаю, что фильтры Джерси не совпадают с фильтрами сервлетов, и я пытаюсь объединить их вместе.
Итак, как вы берете фильтр сервлетов Java и заставляете его работать как фильтр Джерси и как вы берете Java-сервлет и заставляете его работать как ресурс Джерси?
Моя нынешняя стратегия для сервлетов заключается в том, чтобы обернуть их так. Один для каждого.
@Path("/hystrix.stream")
public class HystrixResource extends HystrixUtilizationSseServlet {
@Context
HttpServletRequest httpRequest;
@Context
HttpServletResponse httpResponse;
//This returns void because it is a text/stream output that must remain open,
//so the httpResponse is continually written to until the conenction is closed
@GET
public void doGet() throws ServletException, IOException {
doGet(httpRequest, httpResponse);
}
}
Возможно, это работает, но по какой-то причине данные по существу пусты. Я предполагаю, что причина в том, что фильтры не работают.
data: {"type":"HystrixUtilization","commands":{},"threadpools":{}}
Менее ясно мне, как обернуть Servlet фильтры, потому что они ожидают, что различные входы и выходы, чем в Джерси ContainerRequestFilter. Следующая реализация в моем JerseyConfig, кажется, ничего не делает, потому что журналы не указывают, что фильтры регистрируются, и я не могу сломать строки в этих файлах в режиме отладки.
@Component
@ApplicationPath("/")
public class JerseyConfig extends ResourceConfig {
private static final Logger LOGGER = Logger.getLogger("JerseyConfig");
public JerseyConfig(){
//filter to provide a bridge between JAX-RS and Spring request attributes
register(RequestContextFilter.class);
register(SpringComponentProvider.class);
//handles custom serialization
register(new ObjectMapperContextResolver());
//try to register the filters - which doesn't work because these aren't Jersey Filters
register(HystrixRequestContextServletFilter.class);
register(HystrixRequestLogViaResponseHeaderServletFilter.class);
registerResources();
/*
* Enable the logging filter to see the HTTP response for each request.
*/
register(new LoggingFilter(LOGGER, true));
}
}
Hi @peeskillet. Спасибо за ваш ответ.Я не показываю страницы через весеннюю паутину, так будет ли применима ваша реакция? – th3morg
Что обслуживающие страницы имеют отношение ко всему? Вы отметили Spring Boot, поэтому я даю вам решение Spring Boot. Я не вижу, где страницы обслуживания подходят для решения проблемы. –
Спасибо @peeskillet. Я смог получить эту работу на основе вашего предложения. Потенциально важно отметить, что сервлет для hystrix.stream должен быть HystrixMetricsStreamServlet, а не HystrixUtilizationSseServlet. Я попытаюсь сделать это редактирование. Во-вторых, никакие данные не будут присутствовать до выполнения команды. Итак, если вы перезапустите приложение, ваши данные будут пустыми, пока запросы не пройдут через ваши HystrixCommands. Благодаря! – th3morg