簡體   English   中英

如何避免Google App Engine不支持Runtime.addShutdownHook

[英]how to avoid Google App Engine does not support Runtime.addShutdownHook

我在Google App Engine(java7)上運行此Java代碼

我得到一個錯誤,但是我不確定這是什么意思以及如何避免它?

        final TopicName topicName = pubSubFactory.createOrGetTopic(SpreadSheetConfig.s.TOPIC_NAME_ADD_PARTNER_REQUEST);
        CustomPublisher customPublisher = pubSubFactory.createPublisher(topicName);
        PublisherCallbackWithLog publisherCallback = new PublisherCallbackWithLog<String>();

        for (WazeSdkPartner.WazeSdkRequest wazeSdkRequest : wazeSdkRequestsList.getRequestList()) {
            customPublisher.publish(wazeSdkRequest, publisherCallback);
        }

public <T extends MessageLite> ApiFuture<String> publish(final T message, final ApiFutureCallback<T> futureCallback) throws Exception {
    final PubsubMessage      pubsubMessage   = PubsubMessage.newBuilder().setData(message.toByteString()).build();
    final ApiFuture<String>  messageIdFuture = publisher.publish(pubsubMessage);

    if ( futureCallback != null ) {
        ApiFutures.addCallback(messageIdFuture, (ApiFutureCallback) futureCallback);
    }

    return messageIdFuture;
}

錯誤:Google App Engine不支持Runtime.addShutdownHook

/
java.lang.RuntimeException: java.lang.SecurityException: Google App Engine does not support Runtime.addShutdownHook
    at com.waze.sdkService.servlets.SdkPollerServlet.publishAddPartnersRequests(SdkPollerServlet.java:96)
    at com.waze.sdkService.servlets.SdkPollerServlet.publishRequestsIfNewPartners(SdkPollerServlet.java:72)
    at com.waze.sdkService.servlets.SdkPollerServlet.doGet(SdkPollerServlet.java:63)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

您正在看到該錯誤,因為Google Cloud PubSub使用gRPC作為傳輸層。 特別是,它使用ManagedChannelScheduledExecutorService進行呼叫(均作為ChannelAndExecutor對提供)。 執行程序服務在應用程序完成時退出,它通過使用守護程序線程並添加關閉掛鈎來等待它們完成而退出。

但是,使用Java 7運行時的App Engine Standard不支持gRPC Java 8支持gRPC ,但似乎也沒有計划在Java 7上也支持它(請參閱google-cloud-java GitHub問題 )。

要為您的應用程序指定Java 8運行時,只需appengine-web.xml下行添加到appengine-web.xml文件中:

<runtime>java8</runtime>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM