2013-07-08 2 views
0

봄에 메시지 대기열에서 처리하는 것과 관련하여 질문이 있습니다. 매우 새로운 메시지입니다. queeue에서 읽고 데이터베이스에 라이브 금융 정보를 쓰는 응용 프로그램의 처리량을 늘리려고합니다. 문제는 메시지를 주문한 상태로 유지해야한다는 것입니다. 이는 주문을 잃을 가능성이 있기 때문에 동시 소비자 수를 늘리는 원래의 방식을 사용할 수 없음을 의미합니다.TIBCO에서 SPRING을 통해 효율적으로 처리

1에서 5까지의 동시 사용자를 변경하면 10,000을 처리하고 많은 시간을 절약 할 수 있습니다. (약 20 분)

봄에 처음이고 대학원 개발자 (내 첫해)에 나는 어떤 대안이 있는지 확실하지 않습니다. 스프링 배치 (batch)는 자르지 만, finiancial 정보 거래는 가능한 한 빨리 큐에서 처리해야하므로 예를 들어 채우기 위해 500 개의 배치를 기다릴 필요가 없습니다.

봄을 사용하는이 유형의 시나리오에서 어떤 접근 방식이 가능한지 제안 해 주실 수 있습니까?

감사

답변

0

아래 봄 통합 채널 어댑터와 JDBC 아웃 바운드 어댑터 기반 메시지를 사용하여 소비 이러한 유형의 작업을 수행하는 방법의 예입니다. 퍼포먼스와 퍼포먼스에 영향을 미칠 수있는 몇 가지 핵심 사항은 다음과 같습니다.

  • 거래 - 그것은 약간의 오버 헤드
  • 변환을 추가 할 것입니다 데이터베이스에 큐를 통해 무슨 일 경우 - 얼마나 많은 처리가 테이블 여기

에 메시지 매핑 변환에 들어가는 것은 봄의 통합이다 예; 여기

<int-jms:message-driven-channel-adapter channel="trade.input.channel" 
    concurrent-consumers="1" connection-factory="connectionFactory" 
    destination="issue.queue"/> 

<int:channel id="trade.input.channel"/> 

<int-jdbc:outbound-channel-adapter 
    channel="trade.input.channel" 
    data-source="dataSource" query="insert into target_table (issue_code,issue_price,transaction_timestamp) values (:issue_code,:issue_price,:issue_timestamp)" 
    sql-parameter-source-factory="spelFactory"/>  

<bean id="spelFactory" class="org.springframework.integration.jdbc.ExpressionEvaluatingSqlParameterSourceFactory"> 
    <property name="parameterExpressions"> 
     <map> 
      <entry key="issue_code" value="payload.toString().split(',')[0]"/> 
      <entry key="issue_price" value="payload.toString().split(',')[1]"/> 
      <entry key="issue_timestamp" value="payload.toString().split(',')[2]"/> 
     </map> 
    </property> 
</bean> 

샘플 메시지

MSFT,100.00,1373761697932

아주 거친, 그러나 출발점이 될 수에게 있습니다. 간단한 단위 테스트의 성능은 초당 평균 200 개의 메시지 였지만 하드웨어에 따라 조금씩 다릅니다.

0

요구 사항이 요청과 동일한 순서로 데이터베이스에 쓰는 것이면 완전히 단일 스레드입니다.

그러나 데이터베이스에서 데이터를 읽을 때 순서를 결정하려면 주문 필드가 올바르게 유지되어야합니다 (타임 스탬프는 일반적으로 충분하지 않으므로 최소 정밀도 내에서 여러 요청) 타임 스탬프에 추가 주문 값을 더하면 정확한 순서를 결정할 수 있습니다.

그래서 단일 스레드 입력은 시간 소인과 순서 값을 추가 한 다음 요청을 데이터베이스 작성자 풀에 전달합니다.

주문 값은 매분 또는 적절한 모든 기간을 재설정 할 수 있습니다.

관련 문제