Spring Integration poller有时会运行一次然后停止(Spring Integration poller sometimes runs once then stops)
我在Spring Integration应用程序中有以下基于注释的配置:
@Bean(name = PollerMetadata.DEFAULT_POLLER) public PollerMetadata defaultPoller(@Value("${poll-interval}") int pollInterval) { return Pollers.fixedRate(pollInterval).maxMessagesPerPoll(1).get(); } @Bean @InboundChannelAdapter(value = "httpRequestChannel", poller = @Poller(PollerMetadata.DEFAULT_POLLER), autoStartup = "${auto-start:true}") public MessageSource<String> httpRequestTrigger() { Expression expression = new SpelExpressionParser().parseExpression( "#{@timeService.getLastQueryTime()}", new TemplateParserContext("#{", "}")); return new ExpressionEvaluatingMessageSource<>(expression, String.class); } @Bean @Qualifier("httpRequestChannel") public MessageChannel httpRequestChannel() { return new RendezvousChannel(); } @Bean @ServiceActivator(inputChannel = "httpRequestChannel", poller = @Poller(fixedRate="100")) public MessageHandler httpRequestExecutingMessageHandler( URI backendURI, @Qualifier("httpReplyChannel") MessageChannel httpReplyChannel, RestTemplate restTemplate, @Qualifier("filterExpression") Expression filterExpression ) { HttpRequestExecutingMessageHandler messageHandler = new HttpRequestExecutingMessageHandler( backendURI.toString() + "?filter={filter}", restTemplate); messageHandler.setHttpMethod(HttpMethod.GET); messageHandler.setExpectedResponseType(String.class); messageHandler.setOutputChannel(httpReplyChannel); messageHandler.setExpectReply(true); messageHandler.setSendTimeout(1000); Map<String, Expression> uriVariableExpressions = new HashMap<>(); uriVariableExpressions.put("filter", filterExpression); messageHandler.setUriVariableExpressions(uriVariableExpressions); return messageHandler; } @Bean @Qualifier("httpReplyChannel") public MessageChannel httpReplyChannel() { return new DirectChannel(); }
在我的
application.properties
文件中,auto-start
设置为true
,poll-interval
设置为2000。有时在启动应用程序时,轮询器将按预期工作,触发每个
poll-interval
毫秒。 然而,就像往常一样,在启动时,轮询器将会触发一次并且永远不会再次触发。 我的配置有错误吗? 如何让轮询器始终如一地工作?编辑:当轮询器被绞死时,我接受了一个线程转储:
"task-scheduler-1@4820" prio=5 tid=0x13 nid=NA waiting java.lang.Thread.State: WAITING at sun.misc.Unsafe.park(Unsafe.java:-1) at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175) at java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:458) at java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:362) at java.util.concurrent.SynchronousQueue.put(SynchronousQueue.java:877) at org.springframework.integration.channel.QueueChannel.doSend(QueueChannel.java:93) at org.springframework.integration.channel.AbstractMessageChannel.send(AbstractMessageChannel.java:423) at org.springframework.integration.channel.AbstractMessageChannel.send(AbstractMessageChannel.java:373) at org.springframework.messaging.core.GenericMessagingTemplate.doSend(GenericMessagingTemplate.java:115) at org.springframework.messaging.core.GenericMessagingTemplate.doSend(GenericMessagingTemplate.java:45) at org.springframework.messaging.core.AbstractMessageSendingTemplate.send(AbstractMessageSendingTemplate.java:105) at org.springframework.integration.endpoint.SourcePollingChannelAdapter.handleMessage(SourcePollingChannelAdapter.java:210) at org.springframework.integration.endpoint.AbstractPollingEndpoint.doPoll(AbstractPollingEndpoint.java:272) at org.springframework.integration.endpoint.AbstractPollingEndpoint.access$000(AbstractPollingEndpoint.java:58) at org.springframework.integration.endpoint.AbstractPollingEndpoint$1.call(AbstractPollingEndpoint.java:190) at org.springframework.integration.endpoint.AbstractPollingEndpoint$1.call(AbstractPollingEndpoint.java:186) at org.springframework.integration.endpoint.AbstractPollingEndpoint$Poller$1.run(AbstractPollingEndpoint.java:353) at org.springframework.integration.util.ErrorHandlingTaskExecutor$1.run(ErrorHandlingTaskExecutor.java:55) at org.springframework.core.task.SyncTaskExecutor.execute(SyncTaskExecutor.java:50) at org.springframework.integration.util.ErrorHandlingTaskExecutor.execute(ErrorHandlingTaskExecutor.java:51) at org.springframework.integration.endpoint.AbstractPollingEndpoint$Poller.run(AbstractPollingEndpoint.java:344) at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54) at org.springframework.scheduling.concurrent.ReschedulingRunnable.run(ReschedulingRunnable.java:81) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745) "http-nio-8081-ClientPoller-1@5021" daemon prio=5 tid=0x18 nid=NA runnable java.lang.Thread.State: RUNNABLE at sun.nio.ch.EPollArrayWrapper.epollWait(EPollArrayWrapper.java:-1) at sun.nio.ch.EPollArrayWrapper.poll(EPollArrayWrapper.java:269) at sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:93) at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:86) - locked <0x13b0> (a sun.nio.ch.EPollSelectorImpl) - locked <0x13b1> (a java.util.Collections$UnmodifiableSet) - locked <0x13b2> (a sun.nio.ch.Util$3) at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:97) at org.apache.tomcat.util.net.NioEndpoint$Poller.run(NioEndpoint.java:790) at java.lang.Thread.run(Thread.java:745) "http-nio-8081-ClientPoller-0@5017" daemon prio=5 tid=0x17 nid=NA runnable java.lang.Thread.State: RUNNABLE at sun.nio.ch.EPollArrayWrapper.epollWait(EPollArrayWrapper.java:-1) at sun.nio.ch.EPollArrayWrapper.poll(EPollArrayWrapper.java:269) at sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:93) at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:86) - locked <0x13b3> (a sun.nio.ch.EPollSelectorImpl) - locked <0x13b4> (a java.util.Collections$UnmodifiableSet) - locked <0x13b5> (a sun.nio.ch.Util$3) at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:97) at org.apache.tomcat.util.net.NioEndpoint$Poller.run(NioEndpoint.java:790) at java.lang.Thread.run(Thread.java:745) "NioBlockingSelector.BlockPoller-1@5010" daemon prio=5 tid=0x16 nid=NA runnable java.lang.Thread.State: RUNNABLE at sun.nio.ch.EPollArrayWrapper.epollWait(EPollArrayWrapper.java:-1) at sun.nio.ch.EPollArrayWrapper.poll(EPollArrayWrapper.java:269) at sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:93) at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:86) - locked <0x13b6> (a sun.nio.ch.EPollSelectorImpl) - locked <0x13b7> (a java.util.Collections$UnmodifiableSet) - locked <0x13b8> (a sun.nio.ch.Util$3) at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:97) at org.apache.tomcat.util.net.NioBlockingSelector$BlockPoller.run(NioBlockingSelector.java:339) "task-scheduler-3@4847" prio=5 tid=0x15 nid=NA waiting java.lang.Thread.State: WAITING at sun.misc.Unsafe.park(Unsafe.java:-1) at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039) at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1088) at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:809) at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1067) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1127) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745) "http-nio-8081-Acceptor-0@5022" daemon prio=5 tid=0x19 nid=NA runnable java.lang.Thread.State: RUNNABLE at sun.nio.ch.ServerSocketChannelImpl.accept0(ServerSocketChannelImpl.java:-1) at sun.nio.ch.ServerSocketChannelImpl.accept(ServerSocketChannelImpl.java:422) at sun.nio.ch.ServerSocketChannelImpl.accept(ServerSocketChannelImpl.java:250) - locked <0x13af> (a java.lang.Object) at org.apache.tomcat.util.net.NioEndpoint$Acceptor.run(NioEndpoint.java:456) at java.lang.Thread.run(Thread.java:745) "task-scheduler-2@4837" prio=5 tid=0x14 nid=NA runnable java.lang.Thread.State: RUNNABLE at java.net.SocketInputStream.socketRead0(SocketInputStream.java:-1) at java.net.SocketInputStream.socketRead(SocketInputStream.java:116) at java.net.SocketInputStream.read(SocketInputStream.java:170) at java.net.SocketInputStream.read(SocketInputStream.java:141) at java.io.BufferedInputStream.fill(BufferedInputStream.java:246) at java.io.BufferedInputStream.read1(BufferedInputStream.java:286) at java.io.BufferedInputStream.read(BufferedInputStream.java:345) - locked <0x13b9> (a java.io.BufferedInputStream) at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:704) at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:647) at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1569) - locked <0x13ba> (a sun.net.www.protocol.http.HttpURLConnection) at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1474) at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:480) at org.springframework.http.client.SimpleBufferingClientHttpRequest.executeInternal(SimpleBufferingClientHttpRequest.java:84) at org.springframework.http.client.AbstractBufferingClientHttpRequest.executeInternal(AbstractBufferingClientHttpRequest.java:48) at org.springframework.http.client.AbstractClientHttpRequest.execute(AbstractClientHttpRequest.java:53) at org.springframework.http.client.InterceptingClientHttpRequest$InterceptingRequestExecution.execute(InterceptingClientHttpRequest.java:93) at org.howdoevenexist.AuthInterceptor.intercept(AuthInterceptor.java:24) at org.springframework.http.client.InterceptingClientHttpRequest$InterceptingRequestExecution.execute(InterceptingClientHttpRequest.java:85) at org.springframework.http.client.InterceptingClientHttpRequest.executeInternal(InterceptingClientHttpRequest.java:69) at org.springframework.http.client.AbstractBufferingClientHttpRequest.executeInternal(AbstractBufferingClientHttpRequest.java:48) at org.springframework.http.client.AbstractClientHttpRequest.execute(AbstractClientHttpRequest.java:53) at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:619) at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:595) at org.springframework.web.client.RestTemplate.exchange(RestTemplate.java:516) at org.springframework.integration.http.outbound.HttpRequestExecutingMessageHandler.handleRequestMessage(HttpRequestExecutingMessageHandler.java:382) at org.springframework.integration.handler.AbstractReplyProducingMessageHandler.handleMessageInternal(AbstractReplyProducingMessageHandler.java:109) at org.springframework.integration.handler.AbstractMessageHandler.handleMessage(AbstractMessageHandler.java:127) at org.springframework.integration.endpoint.PollingConsumer.handleMessage(PollingConsumer.java:129) at org.springframework.integration.endpoint.AbstractPollingEndpoint.doPoll(AbstractPollingEndpoint.java:272) at org.springframework.integration.endpoint.AbstractPollingEndpoint.access$000(AbstractPollingEndpoint.java:58) at org.springframework.integration.endpoint.AbstractPollingEndpoint$1.call(AbstractPollingEndpoint.java:190) at org.springframework.integration.endpoint.AbstractPollingEndpoint$1.call(AbstractPollingEndpoint.java:186) at org.springframework.integration.endpoint.AbstractPollingEndpoint$Poller$1.run(AbstractPollingEndpoint.java:353) at org.springframework.integration.util.ErrorHandlingTaskExecutor$1.run(ErrorHandlingTaskExecutor.java:55) at org.springframework.core.task.SyncTaskExecutor.execute(SyncTaskExecutor.java:50) at org.springframework.integration.util.ErrorHandlingTaskExecutor.execute(ErrorHandlingTaskExecutor.java:51) at org.springframework.integration.endpoint.AbstractPollingEndpoint$Poller.run(AbstractPollingEndpoint.java:344) at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54) at org.springframework.scheduling.concurrent.ReschedulingRunnable.run(ReschedulingRunnable.java:81) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745) "http-nio-8081-AsyncTimeout@5025" daemon prio=5 tid=0x1a nid=NA sleeping java.lang.Thread.State: TIMED_WAITING at java.lang.Thread.sleep(Thread.java:-1) at org.apache.coyote.AbstractProtocol$AsyncTimeout.run(AbstractProtocol.java:1137) at java.lang.Thread.run(Thread.java:745) "container-0@4216" prio=5 tid=0x12 nid=NA sleeping java.lang.Thread.State: TIMED_WAITING at java.lang.Thread.sleep(Thread.java:-1) at org.apache.catalina.core.StandardServer.await(StandardServer.java:427) at org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainer$1.run(TomcatEmbeddedServletContainer.java:166) "ContainerBackgroundProcessor[StandardEngine[Tomcat]]@4204" daemon prio=5 tid=0x11 nid=NA sleeping java.lang.Thread.State: TIMED_WAITING at java.lang.Thread.sleep(Thread.java:-1) at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1339) at java.lang.Thread.run(Thread.java:745) "Finalizer@5037" daemon prio=8 tid=0x3 nid=NA waiting java.lang.Thread.State: WAITING at java.lang.Object.wait(Object.java:-1) at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:143) at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:164) at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:209) "Reference Handler@5038" daemon prio=10 tid=0x2 nid=NA waiting java.lang.Thread.State: WAITING at java.lang.Object.wait(Object.java:-1) at java.lang.Object.wait(Object.java:502) at java.lang.ref.Reference.tryHandlePending(Reference.java:191) at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:153) "DestroyJavaVM@5035" prio=5 tid=0x1c nid=NA runnable java.lang.Thread.State: RUNNABLE "Signal Dispatcher@5036" daemon prio=9 tid=0x4 nid=NA runnable java.lang.Thread.State: RUNNABLE
I have the following annotation-based configuration in a Spring Integration app:
@Bean(name = PollerMetadata.DEFAULT_POLLER) public PollerMetadata defaultPoller(@Value("${poll-interval}") int pollInterval) { return Pollers.fixedRate(pollInterval).maxMessagesPerPoll(1).get(); } @Bean @InboundChannelAdapter(value = "httpRequestChannel", poller = @Poller(PollerMetadata.DEFAULT_POLLER), autoStartup = "${auto-start:true}") public MessageSource<String> httpRequestTrigger() { Expression expression = new SpelExpressionParser().parseExpression( "#{@timeService.getLastQueryTime()}", new TemplateParserContext("#{", "}")); return new ExpressionEvaluatingMessageSource<>(expression, String.class); } @Bean @Qualifier("httpRequestChannel") public MessageChannel httpRequestChannel() { return new RendezvousChannel(); } @Bean @ServiceActivator(inputChannel = "httpRequestChannel", poller = @Poller(fixedRate="100")) public MessageHandler httpRequestExecutingMessageHandler( URI backendURI, @Qualifier("httpReplyChannel") MessageChannel httpReplyChannel, RestTemplate restTemplate, @Qualifier("filterExpression") Expression filterExpression ) { HttpRequestExecutingMessageHandler messageHandler = new HttpRequestExecutingMessageHandler( backendURI.toString() + "?filter={filter}", restTemplate); messageHandler.setHttpMethod(HttpMethod.GET); messageHandler.setExpectedResponseType(String.class); messageHandler.setOutputChannel(httpReplyChannel); messageHandler.setExpectReply(true); messageHandler.setSendTimeout(1000); Map<String, Expression> uriVariableExpressions = new HashMap<>(); uriVariableExpressions.put("filter", filterExpression); messageHandler.setUriVariableExpressions(uriVariableExpressions); return messageHandler; } @Bean @Qualifier("httpReplyChannel") public MessageChannel httpReplyChannel() { return new DirectChannel(); }
In my
application.properties
file,auto-start
is set totrue
andpoll-interval
is set to 2000.Sometimes when starting up the application, the poller will work as expected, firing every
poll-interval
milliseconds. However, just as often, when starting up, the poller will fire once and never fire again. Is there an error in my configuration? How do I get the poller to consistently work?EDIT: I took a thread dump when the poller hanged:
"task-scheduler-1@4820" prio=5 tid=0x13 nid=NA waiting java.lang.Thread.State: WAITING at sun.misc.Unsafe.park(Unsafe.java:-1) at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175) at java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:458) at java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:362) at java.util.concurrent.SynchronousQueue.put(SynchronousQueue.java:877) at org.springframework.integration.channel.QueueChannel.doSend(QueueChannel.java:93) at org.springframework.integration.channel.AbstractMessageChannel.send(AbstractMessageChannel.java:423) at org.springframework.integration.channel.AbstractMessageChannel.send(AbstractMessageChannel.java:373) at org.springframework.messaging.core.GenericMessagingTemplate.doSend(GenericMessagingTemplate.java:115) at org.springframework.messaging.core.GenericMessagingTemplate.doSend(GenericMessagingTemplate.java:45) at org.springframework.messaging.core.AbstractMessageSendingTemplate.send(AbstractMessageSendingTemplate.java:105) at org.springframework.integration.endpoint.SourcePollingChannelAdapter.handleMessage(SourcePollingChannelAdapter.java:210) at org.springframework.integration.endpoint.AbstractPollingEndpoint.doPoll(AbstractPollingEndpoint.java:272) at org.springframework.integration.endpoint.AbstractPollingEndpoint.access$000(AbstractPollingEndpoint.java:58) at org.springframework.integration.endpoint.AbstractPollingEndpoint$1.call(AbstractPollingEndpoint.java:190) at org.springframework.integration.endpoint.AbstractPollingEndpoint$1.call(AbstractPollingEndpoint.java:186) at org.springframework.integration.endpoint.AbstractPollingEndpoint$Poller$1.run(AbstractPollingEndpoint.java:353) at org.springframework.integration.util.ErrorHandlingTaskExecutor$1.run(ErrorHandlingTaskExecutor.java:55) at org.springframework.core.task.SyncTaskExecutor.execute(SyncTaskExecutor.java:50) at org.springframework.integration.util.ErrorHandlingTaskExecutor.execute(ErrorHandlingTaskExecutor.java:51) at org.springframework.integration.endpoint.AbstractPollingEndpoint$Poller.run(AbstractPollingEndpoint.java:344) at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54) at org.springframework.scheduling.concurrent.ReschedulingRunnable.run(ReschedulingRunnable.java:81) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745) "http-nio-8081-ClientPoller-1@5021" daemon prio=5 tid=0x18 nid=NA runnable java.lang.Thread.State: RUNNABLE at sun.nio.ch.EPollArrayWrapper.epollWait(EPollArrayWrapper.java:-1) at sun.nio.ch.EPollArrayWrapper.poll(EPollArrayWrapper.java:269) at sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:93) at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:86) - locked <0x13b0> (a sun.nio.ch.EPollSelectorImpl) - locked <0x13b1> (a java.util.Collections$UnmodifiableSet) - locked <0x13b2> (a sun.nio.ch.Util$3) at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:97) at org.apache.tomcat.util.net.NioEndpoint$Poller.run(NioEndpoint.java:790) at java.lang.Thread.run(Thread.java:745) "http-nio-8081-ClientPoller-0@5017" daemon prio=5 tid=0x17 nid=NA runnable java.lang.Thread.State: RUNNABLE at sun.nio.ch.EPollArrayWrapper.epollWait(EPollArrayWrapper.java:-1) at sun.nio.ch.EPollArrayWrapper.poll(EPollArrayWrapper.java:269) at sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:93) at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:86) - locked <0x13b3> (a sun.nio.ch.EPollSelectorImpl) - locked <0x13b4> (a java.util.Collections$UnmodifiableSet) - locked <0x13b5> (a sun.nio.ch.Util$3) at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:97) at org.apache.tomcat.util.net.NioEndpoint$Poller.run(NioEndpoint.java:790) at java.lang.Thread.run(Thread.java:745) "NioBlockingSelector.BlockPoller-1@5010" daemon prio=5 tid=0x16 nid=NA runnable java.lang.Thread.State: RUNNABLE at sun.nio.ch.EPollArrayWrapper.epollWait(EPollArrayWrapper.java:-1) at sun.nio.ch.EPollArrayWrapper.poll(EPollArrayWrapper.java:269) at sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:93) at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:86) - locked <0x13b6> (a sun.nio.ch.EPollSelectorImpl) - locked <0x13b7> (a java.util.Collections$UnmodifiableSet) - locked <0x13b8> (a sun.nio.ch.Util$3) at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:97) at org.apache.tomcat.util.net.NioBlockingSelector$BlockPoller.run(NioBlockingSelector.java:339) "task-scheduler-3@4847" prio=5 tid=0x15 nid=NA waiting java.lang.Thread.State: WAITING at sun.misc.Unsafe.park(Unsafe.java:-1) at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039) at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1088) at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:809) at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1067) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1127) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745) "http-nio-8081-Acceptor-0@5022" daemon prio=5 tid=0x19 nid=NA runnable java.lang.Thread.State: RUNNABLE at sun.nio.ch.ServerSocketChannelImpl.accept0(ServerSocketChannelImpl.java:-1) at sun.nio.ch.ServerSocketChannelImpl.accept(ServerSocketChannelImpl.java:422) at sun.nio.ch.ServerSocketChannelImpl.accept(ServerSocketChannelImpl.java:250) - locked <0x13af> (a java.lang.Object) at org.apache.tomcat.util.net.NioEndpoint$Acceptor.run(NioEndpoint.java:456) at java.lang.Thread.run(Thread.java:745) "task-scheduler-2@4837" prio=5 tid=0x14 nid=NA runnable java.lang.Thread.State: RUNNABLE at java.net.SocketInputStream.socketRead0(SocketInputStream.java:-1) at java.net.SocketInputStream.socketRead(SocketInputStream.java:116) at java.net.SocketInputStream.read(SocketInputStream.java:170) at java.net.SocketInputStream.read(SocketInputStream.java:141) at java.io.BufferedInputStream.fill(BufferedInputStream.java:246) at java.io.BufferedInputStream.read1(BufferedInputStream.java:286) at java.io.BufferedInputStream.read(BufferedInputStream.java:345) - locked <0x13b9> (a java.io.BufferedInputStream) at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:704) at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:647) at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1569) - locked <0x13ba> (a sun.net.www.protocol.http.HttpURLConnection) at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1474) at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:480) at org.springframework.http.client.SimpleBufferingClientHttpRequest.executeInternal(SimpleBufferingClientHttpRequest.java:84) at org.springframework.http.client.AbstractBufferingClientHttpRequest.executeInternal(AbstractBufferingClientHttpRequest.java:48) at org.springframework.http.client.AbstractClientHttpRequest.execute(AbstractClientHttpRequest.java:53) at org.springframework.http.client.InterceptingClientHttpRequest$InterceptingRequestExecution.execute(InterceptingClientHttpRequest.java:93) at org.howdoevenexist.AuthInterceptor.intercept(AuthInterceptor.java:24) at org.springframework.http.client.InterceptingClientHttpRequest$InterceptingRequestExecution.execute(InterceptingClientHttpRequest.java:85) at org.springframework.http.client.InterceptingClientHttpRequest.executeInternal(InterceptingClientHttpRequest.java:69) at org.springframework.http.client.AbstractBufferingClientHttpRequest.executeInternal(AbstractBufferingClientHttpRequest.java:48) at org.springframework.http.client.AbstractClientHttpRequest.execute(AbstractClientHttpRequest.java:53) at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:619) at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:595) at org.springframework.web.client.RestTemplate.exchange(RestTemplate.java:516) at org.springframework.integration.http.outbound.HttpRequestExecutingMessageHandler.handleRequestMessage(HttpRequestExecutingMessageHandler.java:382) at org.springframework.integration.handler.AbstractReplyProducingMessageHandler.handleMessageInternal(AbstractReplyProducingMessageHandler.java:109) at org.springframework.integration.handler.AbstractMessageHandler.handleMessage(AbstractMessageHandler.java:127) at org.springframework.integration.endpoint.PollingConsumer.handleMessage(PollingConsumer.java:129) at org.springframework.integration.endpoint.AbstractPollingEndpoint.doPoll(AbstractPollingEndpoint.java:272) at org.springframework.integration.endpoint.AbstractPollingEndpoint.access$000(AbstractPollingEndpoint.java:58) at org.springframework.integration.endpoint.AbstractPollingEndpoint$1.call(AbstractPollingEndpoint.java:190) at org.springframework.integration.endpoint.AbstractPollingEndpoint$1.call(AbstractPollingEndpoint.java:186) at org.springframework.integration.endpoint.AbstractPollingEndpoint$Poller$1.run(AbstractPollingEndpoint.java:353) at org.springframework.integration.util.ErrorHandlingTaskExecutor$1.run(ErrorHandlingTaskExecutor.java:55) at org.springframework.core.task.SyncTaskExecutor.execute(SyncTaskExecutor.java:50) at org.springframework.integration.util.ErrorHandlingTaskExecutor.execute(ErrorHandlingTaskExecutor.java:51) at org.springframework.integration.endpoint.AbstractPollingEndpoint$Poller.run(AbstractPollingEndpoint.java:344) at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54) at org.springframework.scheduling.concurrent.ReschedulingRunnable.run(ReschedulingRunnable.java:81) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745) "http-nio-8081-AsyncTimeout@5025" daemon prio=5 tid=0x1a nid=NA sleeping java.lang.Thread.State: TIMED_WAITING at java.lang.Thread.sleep(Thread.java:-1) at org.apache.coyote.AbstractProtocol$AsyncTimeout.run(AbstractProtocol.java:1137) at java.lang.Thread.run(Thread.java:745) "container-0@4216" prio=5 tid=0x12 nid=NA sleeping java.lang.Thread.State: TIMED_WAITING at java.lang.Thread.sleep(Thread.java:-1) at org.apache.catalina.core.StandardServer.await(StandardServer.java:427) at org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainer$1.run(TomcatEmbeddedServletContainer.java:166) "ContainerBackgroundProcessor[StandardEngine[Tomcat]]@4204" daemon prio=5 tid=0x11 nid=NA sleeping java.lang.Thread.State: TIMED_WAITING at java.lang.Thread.sleep(Thread.java:-1) at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1339) at java.lang.Thread.run(Thread.java:745) "Finalizer@5037" daemon prio=8 tid=0x3 nid=NA waiting java.lang.Thread.State: WAITING at java.lang.Object.wait(Object.java:-1) at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:143) at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:164) at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:209) "Reference Handler@5038" daemon prio=10 tid=0x2 nid=NA waiting java.lang.Thread.State: WAITING at java.lang.Object.wait(Object.java:-1) at java.lang.Object.wait(Object.java:502) at java.lang.ref.Reference.tryHandlePending(Reference.java:191) at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:153) "DestroyJavaVM@5035" prio=5 tid=0x1c nid=NA runnable java.lang.Thread.State: RUNNABLE "Signal Dispatcher@5036" daemon prio=9 tid=0x4 nid=NA runnable java.lang.Thread.State: RUNNABLE
原文:https://stackoverflow.com/questions/42723061
最满意答案
设置缓存标头将产生类似的性能AFAIK。 GAE和GCS都使用Google Edge缓存 。
GCS可能更容易管理您的静态资源,而需要重新部署到GAE来添加/删除静态资源。
其他重要说明:GCS as CDN无法通过HTTPS与自定义域一起使用。 GAE确实支持使用自定义域的HTTPS。
Setting your cache headers will result in similar performance AFAIK. Both GAE and GCS use Google Edge cache.
GCS is probably easier to manage your static resources, whereas it takes a redeploy to GAE to add/remove static resources.
Other important note : GCS as CDN does not work over HTTPS with custom domains. GAE does support HTTPS with custom domains.
相关问答
更多-
您可以使用http://mathjax.connectmv.com :我们不是CDN,但我们公开承载最新的MathJax文件免费。 我们已将过期的标题设置为2周,并且Access-Control-Allow-Origin: *允许跨站点访问。 You could use http://mathjax.connectmv.com : we are not a CDN, but we publicly host the most recent MathJax files for free. We have ex ...
-
有很多方法来响铃这只猫。 使用kubenaties显然很容易,但是你不需要使用容器引擎(可能过于昂贵),就这样。 如果您有一个包含监听pub-sub的脚本的compute-instance,您可以通过创建实例模板来水平扩展它,并选择根据处理器使用情况自动扩展。 无论你选择做什么,记录的两面性都与发布者有关,而不是订阅者(你的python脚本) 我永远不会将appengine用于这样的任务,即使你很容易在GAE中做到这一点,人们应该尝试只在前端有点角色使用它恕我直言 There are many ways t ...
-
AppScale支持Java,并允许用户部署和托管自己的Google App Engine应用程序 当然你可以,虽然GAE并不意味着被用作CDN 。 查看静态文件和资源文件文档。 AppScale supports Java and allows users to deploy and host their own Google App Engine applications Of course you can, although GAE is not meant to be used as a CDN. ...
-
到目前为止,这是我们在选择CDN(Fastly)的原始主机时发现的: myapp.appspot.com :支持TLS,但要求Host HTTP标头完全是myapp.appspot.com 。 因此, Host头需要被覆盖。 ghs.googlehosted.com :不支持TLS,但接受任何Host HTTP标头,因此您可以使用任何App Engine自定义域。 更多信息在App Engine组的此线程中。 编辑:我错过了在请求中发送SNI。 现在它适用于ghs.googlehosted.com和TLS。 ...
-
是的,通过构建和使用自定义运行时。 从属地 : 为了能够使用需要本地扩展的Node.js包,以下Debian包已预先安装在Docker镜像中 。 建立必要的 CA证书 卷曲 蟒蛇 libkrb5-dev的 ImageMagick的 混帐 如果您的应用程序需要额外的操作系统级依赖项,您将需要使用基于此运行时的自定义运行时来安装适当的程序包。 从构建自定义运行时 : 要创建自定义运行时,您需要: 描述应用程序运行时配置的app.yaml文件。 一个配置运行时环境的Dockerfile 。 在许多情况下,这可能只 ...
-
不,这是不可能的。 阅读Runtime Environment部分。 在App Engine上,您必须使用数据存储区 ,或者您可以使用HTTP调用访问的“数据库服务”。 你可能想看看TyphoonAE 。 No, it is not possible. Read the Runtime Environment section. On App Engine you'll have to use the datastore, or a 'database service' you can access usin ...
-
您可以使用香草DjangGAE来完成您提到的所有事情。 一个很好的起点 值得一提的是,有一些值得注意的局限性。 这些也列在我链接的网站上。 You can use vanilla DjangGAE to do everything you'd mentioned. A good starting point It's worth mentioning that there are a few notable limitations. Those are also listed in the site I'd ...
-
是的,我已经在Google App Engine上实施了HikariCP,但有一些注意事项; Google App Engine使用三种类型和实例类 ; 自动缩放 基本缩放 手动缩放 只有基本和手动缩放类型允许后台线程,因此是与HikariCP一起使用的唯一候选者。 我已经使用了Basic Scaling,这对于大致已知的用户群来说没有问题(例如,每个已部署的实例都有一个公司)。 此类型还支持其他一些不错的功能,如会话支持和功能强大的B8实例(1024 MB / 4.8 GHz)。 对于我的大多数应用程序, ...
-
设置缓存标头将产生类似的性能AFAIK。 GAE和GCS都使用Google Edge缓存 。 GCS可能更容易管理您的静态资源,而需要重新部署到GAE来添加/删除静态资源。 其他重要说明:GCS as CDN无法通过HTTPS与自定义域一起使用。 GAE确实支持使用自定义域的HTTPS。 Setting your cache headers will result in similar performance AFAIK. Both GAE and GCS use Google Edge cache. GC ...
-
任务队列API仅指定用于添加任务的功能。 它们会在完成后将其删除。 但是,您可以使用管理控制台手动删除它们。 详情: http : //code.google.com/appengine/docs/python/taskqueue/overview.html#Managing_Task_Queues The task queue API only specifies a function for adding tasks. It will remove them when they complete. Yo ...