2017-04-17 62 views
0

我有一個spring應用程序,它從一個Kafka主題中消耗並在處理期間在Cassandra上運行一些實時查詢。該應用程序啓動正常,運行良好,但是當我關閉應用程序,這是當前正在處理的批次(批次卡夫卡)拋出Spring CassandraTemplate在關閉應用程序時拋出NoHostAvailableException

org.springframework.cassandra.support.exception.CassandraConnectionFailureException: 所有主機(S )嘗試查詢失敗(未嘗試主機);嵌套0​​例外是 com.datastax.driver.core.exceptions.NoHostAvailableException:所有 主機(S)試了查詢失敗(無主機受審)

stack-trace,流媒體查詢我運行卡桑德拉未能在

org.springframework.data.cassandra.core.CassandraTemplate $ ResultSetIteratorAdapter.hasNext(CassandraTemplate.java:1218)

扔個e以上例外

編輯

所以它的彈簧引導應用與執行器。我使用執行器的關閉端點關閉應用程序。我正在使用Spring Cassandra存儲庫與我的數據庫進行交互。我沒有明確關閉任何連接。

流傳輸讀取期間發生錯誤。當我點擊/關閉端點時,10次中有9次正在執行,並且失敗。 JPA和mongo能夠優雅地關閉。

int[] fareTrend = fareInfoRepository.findByOriginAndDestinationAndEventTimeAfter(originCode, destinationCode, 
                         Instant.now().minusSeconds(FARE_TREND_THRESHOLD_SECONDS)) 
              .filter(fareInfo -> departureRange.contains(fareInfo.getDepartureDate())) 
              .filter(fareInfo -> "e".equals(fareInfo.getFareDetails().getCabinClass())) 
              .sorted(Comparator.comparing(FareInfo::getEventTime)) 
              .mapToInt(FareInfo::getTotalFare).toArray(); 

存儲庫:

@Repository 
public interface FareInfoRepository extends CassandraRepository<FareInfo> { 

    Stream<FareInfo> findByAdvancePurchaseDays(short advancepurchasedays); 

    Stream<FareInfo> findByOriginAndDestinationAndEventTimeAfter(String origin, String destination, Instant eventTimeLimit); 
} 

主類:

@ComponentScan("com.ixigo.analytics") 
@EntityScan("com.ixigo.analytics.common.jpa.models") 
@EnableJpaRepositories("com.ixigo.analytics.common.jpa.repos") 
@EnableCassandraRepositories("com.ixigo.analytics.common.cassandra.repos") 
@SpringBootApplication(exclude = MongoDataAutoConfiguration.class) 
public class DispatcherMain { 

    public static void main(String[] args) { 
     SpringApplication.run(DispatcherMain.class, args); 
    } 
} 

卡桑德拉configuration

+0

你能提供這個代碼片段嗎?你是如何關閉連接的?停止前沖洗了嗎? –

回答

0

不是一個真正的答案,但從我的分析中,查詢「findByOriginAndDestinationAndEventTimeAfter()」花費了大量的時間,並且會導致卡夫卡消費者有效卡住,當我嘗試關閉它時會導致該錯誤。 我重寫了我的邏輯,使處理很多更快,現在我沒有得到錯誤。