2017-05-09 1 views
1

저는 Spring Integration과 Feed Inbound Channel Adapter를 사용하여 뉴스 RSS 피드를 처리합니다 (환상적이라고 생각합니다 :). 또한 API에서 동일한 채널에 사용할 수있는 몇 가지 추가 뉴스 피드를 사용하고 싶습니다. API는 JSON에서 뉴스 기사 목록을 반환하는 HTTP 끝점 일뿐입니다. 필드는 RSS와 매우 유사합니다. 즉, SyndEntry 객체에 매핑 할 수있는 제목, 설명, 게시 날짜가 있습니다.Spring 통합 사용자 정의 피드 인바운드 채널 어댑터

이상적으로는 중복 입력 등을 처리하는 피드 인바운드 채널 어댑터에서 사용할 수있는 동일한 기능을 사용하고 싶습니다. JSON을 처리하고 매핑하기 위해 피드 인바운드 채널 어댑터를 사용자 정의 할 수 있습니까?

모든 샘플 코드 또는 포인터가 도움이 될 것입니다.

답변

0

음, 아니요. FeedEntryMessageSource은 XML 모델을 다루는 Rome Tools을 기반으로합니다.

JSON 레코드에 대해 SyndEntry 개의 인스턴스를 생성하는 고유 한 구성 요소를 만들어야 할까봐 걱정됩니다. 실제로는 기본적으로 MappingJackson2HttpMessageConverter이있는 RestTemplate을 기반으로 HttpRequestExecutingMessageHandler과 같은 값일 수 있습니다.

HttpRequestExecutingMessageHandlersetExpectedResponseType(SyndFeedImpl.class)으로 구성하려고 시도 할 수 있으며 응답에 application/json 콘텐츠 유형이 있어야합니다.

"중복 항목 처리"를 달성하려면 나중에 Idempotent Receiver 패턴을 사용하는 것이 좋습니다.

if (lastModifiedDate != null) { 
     this.lastTime = lastModifiedDate.getTime(); 
    } 
    else { 
     this.lastTime += 1; //NOSONAR - single poller thread 
    } 
    this.metadataStore.put(this.metadataKey, this.lastTime + ""); 

    ... 

    if ((entryDate != null && entryDate.getTime() > this.lastTime) 

entrypayload (FeedEntry)는 언급 HttpRequestExecutingMessageHandler에서 splitted 결과 다음 MessageSelector가 정말 MetadaStore에 기반해야한다 어디 FeedEntryMessageSource에서 비슷한 논리를 미리 형성.

+0

감사합니다 Artem, 나는 그것이 그렇게 쉬울 것이라고 생각하지 않았습니다. 나는 가야하고 내가 일할 수 있는지, 너의 지원에 감사한다. – Swordfish

관련 문제