关闭应用程序

时间:2017-04-17 14:49:29

标签: java spring spring-mvc cassandra

我有一个Spring应用程序,它使用Kafka主题并在处理期间在Cassandra上运行一些实时查询。应用程序启动正常,运行正常,但是当我关闭应用程序时,正在处理的当前批处理(Kafka批处理)抛出

  

org.springframework.cassandra.support.exception.CassandraConnectionFailureException:   尝试查询失败的所有主机(未尝试主机);嵌套   例外是   com.datastax.driver.core.exceptions.NoHostAvailableException:全部   尝试查询失败的主机(未尝试主机)

stack-trace开始,我在Cassandra上运行的流式查询在

失败
  

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

抛出上述异常

修改

所以它是一个带执行器的弹簧启动应用程序。我使用执行器的/ shutdown端点关闭应用程序。我正在使用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

1 个答案:

答案 0 :(得分:0)

不是真正的答案,但从我的分析中,查询&#34; findByOriginAndDestinationAndEventTimeAfter()&#34;,花了很多时间,会导致Kafka消费者有效卡住,当我试图关闭它时会导致错误。 我重新设计了逻辑,使处理更多更快,现在我没有收到错误。