[SPRING] Spring의 DeferredResult로 긴 폴링
SPRINGSpring의 DeferredResult로 긴 폴링
클라이언트는 비동기 메소드 (long polling)를 주기적으로 호출하여 서버가 데이터베이스를 쿼리하고 객체를 클라이언트에 반환하기 위해 사용하는 주식 기호 값을 전달합니다.
Spring의 DeferredResult 클래스를 사용하고 있지만, 어떻게 동작하는지 잘 알지 못합니다. 클라이언트에서 보낸 심볼 속성을 사용하여 데이터베이스에 새 데이터를 쿼리하는 방법에 유의하십시오 (아래 참조).
아마도 Spring에서의 긴 폴링을위한 더 나은 접근법이있을 것입니다.
어떻게 deferredResult () 메서드에서 symbol 속성을 processQueues ()로 전달합니까?
private final Queue<DeferredResult<String>> responseBodyQueue = new ConcurrentLinkedQueue<>();
@RequestMapping("/poll/{symbol}")
public @ResponseBody DeferredResult<String> deferredResult(@PathVariable("symbol") String symbol) {
DeferredResult<String> result = new DeferredResult<String>();
this.responseBodyQueue.add(result);
return result;
}
@Scheduled(fixedRate=2000)
public void processQueues() {
for (DeferredResult<String> result : this.responseBodyQueue) {
Quote quote = jpaStockQuoteRepository.findStock(symbol);
result.setResult(quote);
this.responseBodyQueue.remove(result);
}
}
해결법
-
==============================
1.Spring 4.1.7의 DeferredResult :
Spring 4.1.7의 DeferredResult :
DeferredResult를 확장하고 심볼 매개 변수를 클래스 필드로 저장할 수 있습니다.
static class DeferredQuote extends DeferredResult<Quote> { private final String symbol; public DeferredQuote(String symbol) { this.symbol = symbol; } } @RequestMapping("/poll/{symbol}") public @ResponseBody DeferredQuote deferredResult(@PathVariable("symbol") String symbol) { DeferredQuote result = new DeferredQuote(symbol); responseBodyQueue.add(result); return result; } @Scheduled(fixedRate = 2000) public void processQueues() { for (DeferredQuote result : responseBodyQueue) { Quote quote = jpaStockQuoteRepository.findStock(result.symbol); result.setResult(quote); responseBodyQueue.remove(result); } }
from https://stackoverflow.com/questions/31458910/long-polling-with-springs-deferredresult by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 고성능 JMS 메시징 (0) | 2019.02.07 |
---|---|
[SPRING] JPA 다중 트랜잭션 관리자 (0) | 2019.02.07 |
[SPRING] BeanDefinitionStoreException 후보 구성 요소 클래스를 읽지 못했습니다. (0) | 2019.02.07 |
[SPRING] Spring 부트를 1.3.7에서 1.4.0으로 업그레이드하면 AuthenticatorBase.getJaspicProvider에서 NullPointerException이 발생합니다. (0) | 2019.02.07 |
[SPRING] Spring의 Proxy 객체를 실제 런타임 클래스로 캐스팅 (0) | 2019.02.07 |