2017-10-18 12 views
0

後 を設定 - 同時実行= 15 - maxConcurrency = 25 - デフォルトのプリフェッチとtxSize。のRabbitMQ +春ブーツ+ 15分間アイドル状態の消費者たちは、PCF</p> <p>プロパティ上のサービスとしてウサギMQに接続するために、春ブーツ(1.5)との統合を使用して単一のメッセージを処理

メッセージの処理方法。

  1. キューは1秒以内に26個のメッセージを受信しました。
  2. 15消費者が次の分で開始して完了しました。
  3. 各消費者の平均所要時間は約30秒です。
  4. 消費者の数は15秒未満でした。
  5. 各コンシューマが承認したので、readyからの新しいメッセージ(16番目、17番目のメッセージ)がウサギMQで確認不能になります。

これまでのところ、古いメッセージが確認されたときに新しいメッセージが処理されていると仮定しています。 しかし、新しいメッセージがrabbitMQでunack'edになると、どのメッセージも処理されません。消費者は固まって空いている。

  1. これが続き、すべてのレディ状態のメッセージは未確認になり、何もしなくてもそこにとどまります。
  2. これらはすべて約15分後に再開します。

私はこの動作を常に見ています。

ガイダンスはありますか?

ウサギの配線を行うコードです。 中間のMessageHandlerには、大きなデータに接続してクエリを実行するコードがあります。

@Configuration 
@EnableRabbit 
public class RabbitMQ { 

    protected final Logger logger = LoggerFactory.getLogger(this.getClass()); 

    @Value("${spring.rabbitmq.listener.concurrency:3}") 
    private int concurrentConsumers; 

    @Value("${spring.rabbitmq.listener.maxConcurrency:5}") 
    private int maxConcurrentConsumers; 

    @Value("${spring.rabbitmq.template.retry.max-attempts:3}") 
    private int maxAttempts; 

    @Value("${spring.rabbitmq.template.retry.initial-interval:2000}") 
    private int initialInterval; 

    @Value("${spring.rabbitmq.template.retry.multiplier:3}") 
    private int multiplier; 

    @Value("${spring.rabbitmq.template.retry.max-interval:10000}") 
    private int maxInterval; 

    @Autowired 
    private BotQueues botQueues; 

    @Autowired 
    private RetryFailLogger retryRecoverer; 

    @Bean 
    public StatefulRetryOperationsInterceptor statefulRetryOperationsInterceptor() { 
     return RetryInterceptorBuilder.stateful() 
       .backOffOptions(initialInterval, multiplier, maxInterval) // initialInterval, multiplier, maxInterval 
       .maxAttempts(maxAttempts) 
       .messageKeyGenerator(message -> message.getMessageProperties().getMessageId()) 
       .recoverer(retryRecoverer) 
       .build(); 
    } 

    @Bean 
    public Jackson2JsonMessageConverter defaultJsonMessageConverter() { 

     Jackson2JsonMessageConverter jsonConverter = new Jackson2JsonMessageConverter(); 
     DefaultClassMapper classMapper = new DefaultClassMapper(); 
     classMapper.setDefaultType(JobDetailInfo.class); 
     jsonConverter.setClassMapper(classMapper); 

     return jsonConverter; 
    } 

    @Bean 
    public SimpleMessageListenerContainer container(ConnectionFactory connectionFactory) 
      throws BeansException, ClassNotFoundException { 

     SimpleMessageListenerContainer container = new SimpleMessageListenerContainer(connectionFactory); 
     container.setQueues(botQueues.inputQueues()); 
     container.setConcurrentConsumers(concurrentConsumers); 
     container.setMaxConcurrentConsumers(maxConcurrentConsumers); 
     container.setChannelTransacted(true); 
     container.setAdviceChain(new Advice[] {statefulRetryOperationsInterceptor()}); 
     return container; 
    } 

    @Bean 
    public AmqpInboundChannelAdapter inbound(SimpleMessageListenerContainer container, 
      @Qualifier("commonInputChannel") MessageChannel amqpInputChannel) { 
     AmqpInboundChannelAdapter adapter = new AmqpInboundChannelAdapter(container); 
     adapter.setMessageConverter(defaultJsonMessageConverter()); 
     adapter.setOutputChannel(amqpInputChannel); 
     return adapter; 
    } 

    @Bean 
    @ServiceActivator(inputChannel = "commonInputChannel", outputChannel = "commonOutputChannel") 
    public MessageHandler messageHandler() { 
     return new MessageHandler(); 
    } 

    @Router(inputChannel = "commonOutputChannel") 
    public String resolveJobChannel(JobDetailInfo jobDetailInfo) { 

     String returnChannel = ""; 

     if (jobDetailInfo != null) { 
      switch (jobDetailInfo.getJobStatus()) { 
       case Scheduled: 
        returnChannel = "collectorChannel"; 
        break; 

       default: 
        break; 
      } 
     } 

     return returnChannel; 
    } 
} 

スレッドダンプ:

{ "のthreadName": "コンテナ-14"、 "スレッドID" 40、 "blockedTime" - 1 "blockedCount":45、 "waitedTime "、" lockOwnerName ":null、" inNative ":false、" false "、" lockOwnerId " "suspend":false、 "threadState": "TIMED_WAITING"、 "stackTrace":[{"methodName": "park"、 "fileName": "Unsafe.java"、 "lineNumber": - 2、 "className": " {"methodName": "parkNanos"、 "fileName": "LockSupport.java"、 "lineNumber":215、 "className": "java.util.concu"、 "sun.misc.Unsafe"、 "nativeMethod"クラス名 ":" java.util.concurrent "、" classNames "、" fileName ":" AbstractQueuedSynchronizer.java "、" lineNumber ":2078 "" "" ""、 ""、 ""、 ""、 ""、 "className": "java.util.concurrent"、 "LinkNumber": "LinkMember" {"methodName": "nextMessage"、 "fileName": "BlockingQueueConsumer.java"、 "lineNumber":461、 "className": "org.springframework.amqp.rabbit.listener"、 "nativeMethod" {"methodName": "doReceiveAndExecute"、 "fileName": "SimpleMessageListenerContainer.java"、 "lineNumber":1214、 "className": "org.springframework.amqp.rabbit.listener"、 "nativeMethod" 「SimpleMessageListenerContainer.java」、「lineNumber」:1189、「className」:「org.springframework.amqp.rabbit.listener」:「SimpleMessageListenerContainer」、「nativeMethod」:false}SimpleMessageListenerContainer.java "、" lineNumber ":97、" className ":" org.springframework.amqp.rabbit.listener "、" nativeMessageListenerContainer "、" nativeMethod ":false}、{" methodName ":"アクセス$ 1500 "、"ファイル名 " "" "" "" "" "" "" "" "" SimpleMessageListenerContainer.java "、" lineNumber ":1421、" className ":" org.springframework.amqp.rabbit.listener "を"実行 "、" nativeMethodListenerContainer " 。 "、" fileName ":" Thread.java "、" lineNumber ":748、" className ":" java.lang.Thread "、"ファイル名 "、"ファイル名 "、"ファイル名 " "lockedMonitors":[]、 "lockedSynchronizers":[]、 "lockInfo":{"className": "java.util.concurrent.locks.AbstractQueuedSynchronizer $ ConditionObject"、 "identityHashCode":457376425 "nativeMethod":false} "、" threadTime ":39、" blockedTime ": - 1、" blockedCount ":34、" waitedTime ": - 1、" waitedCount ": "lockName":null、 "inNative":true、 "中断":false、 "threadState": "RUNNABLE"、 "stackTrace":[{"" methodName " "methodName": "socketRead"、 "socketRead0"、 "fileName": "SocketInputStream.java"、 "lineNumber":2、 "className": "java.net.SocketInputStream"、 "nativeMethod":true} "fileName": "SocketInputStream.java"、 "lineNumber":116、 "className": "java.net.SocketInputStream"、 "nativeMethod":false}、{"methodName": "read"、 "fileName": "SocketInputStream "methodName": "read"、 "fileName": "SocketInputStream.java"、 "lineNumber": "java.net.SocketInputStream"、 "nativeMethod":false} "、" className ":" java.net.SocketInputStream "、" nativeMethod ":false}、{" methodName ":" readMore "、" fileName ":" VisibleBufferedInputStream.java "、" lineNumber ":140、" className ":" org.postgresql.core.VisibleBufferedInputStream "、" nativeMethod ":false}、{" methodName ":" ensureBytes "、" fileName ":" VisibleBufferedInputStream.java "、" lineNumber ":109、" className ":" org .postgresql.core.VisibleBuffered 「行」、「行」、「行」、「列」、「列」、「列」、「列」、「列」、「列」、「列」、「列」、 "nativeMethod":false}、{"methodName": "receiveChar"、 "fileName": "PGStream.java"、 "lineNumber":280、 "className": "org.postgresql.core.PGStream"、 "nativeMethod":false }、 "methodName": "processResults"、 "fileName": "QueryExecutorImpl.java"、 "lineNumber":1916、 "className": "org.postgresql.core.v3.QueryExecutorImpl"、 "nativeMethod":false}、 {"methodName": "execute"、 "fileName": "QueryExecutorImpl.java"、 "lineNumber":288、 "className": "org.postgresql.core.v3.QueryExecutorImpl"、 "nativeMethod":false}、{ "methodName": "methodName": "executeInternal"、 "fileName": "PgStatement.java"、 "lineNumber":430、 "className": "org.postgresql.jdbc.PgStatement"、 "nativeMethod":false} {"methodName": "executeWithFlags"、 "executeWithFlags"} "、" fileName ":" PgStatement.java "、" lineNumber ":356、" className ":" org.postgresql.jdbc.PgStatement "、" nativeMethod " fileName ":" PgStatement.java "、" lineNumber ":303、" className ":" org.postgresql.jdbc.PgStatement "、" nativeMethod ":false}、{" methodName ":" executeCachedSql "、" fileName ":" PgStatement.java "、" lineNumber ":289、" className ":" org.postgresql.jdbc.PgStatement "、" nativeMethod ":false}、{" methodName ":" executeWithFlags "、" fileName ":" PgStatement.java "、" lineNumber ":266、 "className": "org.postgresql.jdbc.PgStatement"、 "nativeMethod":false}、{"methodName": "execute"、 "fileName": "PgStatement.java"、 "lineNumber":262、 "className" "org.apostgresql.jdbc.PgStatement"、 "nativeMethod":false}、{"methodName": "validate"、 "fileName": "PooledConnection.java"、 "lineNumber":532、 "className": "org.apache 。 "、" name ":" org.apache "、" className ":" org.apache "、"。クラス名: "org.apache"、 "org.apache"、 "org.apache"、 "org.apache"、 "org.apache"、 "connectionMessage" .tomcat.jdbc.pool.ConnectionPool "、" nativeMethod ":false}、 {"methodName": "borrowConnection"、 "fileName": "ConnectionPool.java"、 "lineNumber":651、 "className": "org.apache.tomcat.jdbc.pool.ConnectionPool"、 "nativeMethod":false} {"methodName": "getConnection"、 "fileName": "ConnectionPool.java"、 "lineNumber":198、 "className": "org.apache.tomcat.jdbc.pool.ConnectionPool"、 "nativeMethod":false} {"methodName": "getConnection"、 "fileName": "DataSourceProxy.java"、 "lineNumber":132、 "className": "org.apache.tomcat.jdbc.pool.DataSourceProxy"、 "nativeMethod":false} {"methodName": "getConnection"、 "fileName": "DatasourceConnectionProviderImpl.java"、 "lineNumber":122、 "className": "org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl"、 "nativeMethod":false "、" className ":" org.hibernate.internal.NonContextualJdbcConnectionAccess "、" nativeMethod ":false}、{" methodName ":" getConnection "、" fileName ":" NonContextualJdbcConnectionAccess.java "、" lineNumber " methodName ":" acquireConnectionIfNeeded "、" fileName ":" LogicalConnectionManagedImpl。99 "、" className ":" org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl "、" nativeMethod ":false}、{" methodName ":" getPhysicalConnection "、" fileName ":" LogicalConnectionManagedImpl。 {"methodName": "getConnectionForTransactionManagement"、 "fileName": "LogicalConnectionManagedImpl"、 "java"、 "lineNumber":129、 "className": "org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl"、 "nativeMethod":false} {"methodName": "begin"、 "fileName": "LogicalConnectionManagedImpl"、 "java"、 "lineNumber":247、 "className": "org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl"、 "nativeMethod":false} "methodName": "begin"、 "fileName": "JdbcResourceLocalTransactionCoordinatorImpl": "java"、 "lineNumber":254、 "className": "org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl"、 "nativeMethod":false} 「java」、「lineNumber」:203、「className」:「org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl $ TransactionDriverControlImpl」、「nativeMethod」:fals "、" className ":" org.hibernate.engine.transaction.internal.TransactionImpl "、" nativeMethod ":このメソッドは、 "、" className ":" org.springframework.orm.jpa.vendor.HibernateJpaDialect "、" nativeMethod ":"クラス名 "、" className ":" org.springframework.orm.jpa.vendor.HibernateJpaDialect " {"methodName": "doBegin"、 "fileName": "JpaTransactionManager.java"、 "lineNumber":380、 "className": "org.springframework.orm.jpa.JpaTransactionManager"、 "nativeMethod":false} {"methodName": "getTransaction"、 "fileName": "AbstractPlatformTransactionManager.java"、 "lineNumber":373、 "className": "org.springframework.transaction.support.AbstractPlatformTransactionManager"、 "nativeMethod":false}、{ "methodName": "createTransactionIfNecessary"、 "fileName": "TransactionAspectSupport.java"、 "lineNumber":447、 "className": "org.springframework.transaction.interceptor.TransactionAspectSupport"、 "nativeMethod":false}、{"methodName ":" invokeWithinTransaction "、" fileName ":"トランザクション「メソッド名」:「invoke」、「fileName」:「TransactionInterceptor」、「AspectSupport.java」、「lineNumber」:277、「className」:「org.springframework.transaction.interceptor.TransactionAspectSupport」、「nativeMethod」:false} {"methodName": "続行"、 "fileName": "ReflectiveMethodInvocation.java"、 "Java"、 "lineNumber":96、 "className": "org.springframework.transaction.interceptor.TransactionInterceptor"、 "nativeMethod" 、 "lineName":179、 "className": "org.springframework.aop.framework.ReflectiveMethodInvocation"、 "nativeMethod":false}、{"methodName": "intercept"、 "fileName": "CglibAopProxy.java" {"methodName": "handleMessage"、 "fileName": ""、 "lineNumber":672、 "lineNumber":673、 "className": "org.springframework.aop.framework.CglibAopProxy $ DynamicAdvisedInterceptor"、 "nativeMethod" -1、 "className": "message.handlers.MessageHandler $$ EnhancerBySpringCGLIB $$ cf53d23e"、 "nativeMethod":false}、{"methodName": "invoke"、 "fileName":null、 "lineNumber" "className": "sun.reflect.GeneratedMethodAccessor145"、 "nativeMethod":false}、{"methodName": "i" 43 "、" className ":" sun.reflect.DelegatingMethodAccessorImpl "、" nativeMethod ":false}、{" methodName ":" invoke "、" fileName ":"ファイル名 ":" DelegatingMethodAccessorImpl.java " : "methodName": "execute"、 "fileName": "ReflectiveMethodExecutor": "Method.java"、 "lineNumber":498、 "className": "java.lang.reflect.Method"、 "nativeMethod" "methodName": "getValueInternal"、 "fileName": "MethodReference。"、 "className": "org.springframework.expression.spel.support.ReflectiveMethodExecutor"、 "nativeMethod" {"methodName": "$ 000"、 "fileName": "MethodReference"、 "className": "org.springframework.expression.spel.ast.MethodReference"、 "nativeMethod":false} 「methodName」:「getValue」、「fileName」:「MethodReference」、「getMethod」、「getMethodReference」、「getMethodReference」、 "、" lineNumber ":347、" className ":" org.springframework.expression.spel.ast.MethodReference $ MethodValueRef "、" nativeMethod ":false}、{" methodNa 88 "、" className ":" org.springframework.expression.spel.ast.CompoundExpression "、" nativeMethod ":false}、{"} "getValueInternal"、 "fileName": "CompoundExpression.java"、 "lineNumber" "methodName": "getTypedValue"、 "fileName": "SpelNodeImpl.java"、 "lineNumber":131、 "className": "org.springframework.expression.spel.ast.SpelNodeImpl"、 "nativeMethod":false}、{メソッド名: "getValue"、 "fileName": "SpelExpression.java"、 "lineNumber":330、 "className": "org.springframework.expression.spel.standard.SpelExpression"、 "nativeMethod":false}、{ "methodName": "evaluateExpression"、 "fileName": "AbstractExpressionEvaluator.java"、 "lineNumber":169、 "className": "org.springframework.integration.util.AbstractExpressionEvaluator"、 "nativeMethod":false}、{"methodName" : "methodName": "methodName": "messageName": "messageMethodInvokerHelper.java"、 "lineNumber":319、 "className": "org.springframework.integration.util.MessagingMethodInvokerHelper"、 "nativeMethod"プロセス "、"ファイル名 ":" MessagingMethodInvokerHelper。{"methodName": "processMessage"、 "fileName": "MethodInvokingMessageProcessor.java"、 "java"、 "lineNumber":155、 "className": "org.springframework.integration.util.MessagingMethodInvokerHelper"、 "nativeMethod" 、 "lineNumber":93、 "className": "org.springframework.integration.handler.MethodInvokingMessageProcessor"、 "nativeMethod":false}、{"methodName": "handleRequestMessage"、 "fileName": "ServiceActivatingHandler.java"、 " "methodName": "handleMessageInternal"、 "fileName": "AbstractReplyProducingMessageHandler.java"、 "lineNumber":89、 "className": "org.springframework.integration.handler.ServiceActivatingHandler"、 "nativeMethod":false} :109、 "className": "org.springframework.integration.handler.AbstractReplyProducingMessageHandler"、 "nativeMethod":false}、{"methodName": "handleMessage"、 "fileName": "AbstractMessageHandler.java"、 "lineNumber":127 "nativeName":false}、{"methodName": "doDispatch"、 "fileName": "UnicastingDispatcher.java"、 "className": "org.springframework.integration.handler.AbstractMessageHandler" 、 "lineName":160、 "className": "org.springframework.integration.dispatcher.UnicastingDispatcher"、 "nativeMethod":false}、{"methodName": "dispatch"、 "fileName": "UnicastingDispatcher.java"、 " {"methodName": "doSend"、 "fileName": "AbstractSubscribableChannel.java"、 "lineNumber":121、 "className": "org.springframework.integration.dispatcher.UnicastingDispatcher"、 "nativeMethod":false} :89、 "className": "org.springframework.integration.channel.AbstractSubscribableChannel"、 "nativeMethod":false}、{"methodName": "send"、 "fileName": "AbstractMessageChannel.java"、 "lineNumber":423 "methodName": "send"、 "fileName": "AbstractMessageChannel.java"、 "lineNumber":373、 "className": "org.springframework.integration.channel.AbstractMessageChannel"、 "nativeMethod" {"methodName": "doSend"、 "fileName": "GenericMessagingTemplate.java"、 "lineNumber":115、 "className":className ":" org.springframework.integration.channel.AbstractMessageChannel "、" nativeMethod " : "org.springframework.messaging.core.GenericMessagingTemplate" "、" nativeMethod ":false}、{" methodName ":" doSend "、" fileName ":" GenericMessagingTemplate.java "、" lineNumber ":45、" className ":" org.springframework.messaging.core.GenericMessagingTemplate "、" "nativeMessageSendingTemplate.java"、 "lineNumber":105、 "className": "org.springframework.messaging.core.AbstractMessageSendingTemplate"、 "nativeMethod":false "、" :false}、{"methodName": "sendMessage"、 "fileName": "MessageProducerSupport.java"、 "lineNumber":188、 "className": "org.springframework.integration.endpoint.MessageProducerSupport"、 "nativeMethod":false "、" methodName ":" access $ 1100 "、" fileName ":" AmqpInboundChannelAdapter.java "、" lineNumber ":56、" className ":" org.springframework.integration.amqp.inbound.AmqpInboundChannelAdapter "、" nativeMethod ": {{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} ":false}、{" methodName ":" onMess {"methodName"} "、" fileName ":" AmqpInboundChannelAdapter.java "、" lineNumber ":203、" className ":" org.springframework.integration.amqp.inbound.AmqpInboundChannelAdapter $ Listener "、" nativeMethod " : "メソッド名": "メソッド名": "メソッド名": "メソッド名": "メソッド名": " : "メソッド名": "メソッド名": "メソッド名": "オブジェクト名": " : "$ 001"、 "fileName": "SimpleMessageListenerContainer.java"、 "lineNumber":97、 "className": "org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer"、 "nativeMethod":false}、{"methodName ":" invokeListener "、" fileName ":" SimpleMessageListenerContainer.java "、" lineNumber ":189、" className ":" org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer $ 1 "、" nativeMethod "、" className ":" sun.reflect.GeneratedMethodAccessor112 "、" nativeMethod ":false}、{" methodName ":null、" lineNumber " : "invoke"、 "invoke"、 "fileName": "DelegatingMethodAccessorImpl.java"、 "lineNumber":43、 "className": "sun.reflect.DelegatingMethodAccessorImpl"、 "nativeMethod":false}、{"methodName" "methodName": "invokeJoinpointUsingReflection"、 "fileName": "fileName": "Method.java"、 "lineNumber":498、 "className": "java.lang.reflect.Method"、 "nativeMethod" "methodName": "invokeJoinpoint"、 "fileName": "ReflectiveMethodInvocation": "AopUtils.java"、 "lineNumber":333、 "className": "org.springframework.aop.support.AopUtils"、 "nativeMethod":false} {"methodName": "続行"、 "fileName": "ReflectiveMethodInvocation.java"、 "Java"、 "lineNumber":190、 "className": "org.springframework.aop.framework.ReflectiveMethodInvocation"、 "nativeMethod" 、 "lineNumber":157、 "className": "org.springframework.aop.framework。クラス名 ":" org.springframework.retry.interceptor.StatefulRetryOperationsInterceptor $ ":" ReflectiveMethodInvocation "、" nativeMethod ":false}、{" methodName ":" doWithRetry "、" fileName ":" StatefulRetryOperationsInterceptor.java "、" lineNumber "メソッド名: "methodName": "doExecute"、 "fileName": "RetryTemplate.java"、 "lineNumber":286、 "className": "org.springframework.retry.support.RetryTemplate"、 "MethodInvocationRetryCallback"、 "nativeMethod"クラス名: "org.springframework.retry.support.RetryTemplate"、 "nativeMethod":false}、{"methodName": "execute"、 "fileName": "RetryTemplate.java"、 "lineNumber" "nativeMethod":false}、{"methodName": "invoke"、 "fileName": "StatefulRetryOperationsInterceptor.java"、 "lineNumber":173、 "className": "org.springframework.retry.interceptor.StatefulRetryOperationsInterceptor"、 "nativeMethod" :false}、{"methodName": "続行"、 "fileName": "ReflectiveMethodInvocation.java"、 "lineNumber":179、 "className": "org.springframework.aop.framework.ReflectiveMethodInvocation"、 "nativeMethod":false }、{"methodName ":" invoke "、" fileName ":" JdkDynamicAopProxy.java "、" lineNumber ":213、" className ":" org.springframework.aop.framework.JdkDynamicAopProxy "、" nativeMethod ":false}、{" methodName ": "invokeListener"、 "fileName":null、 "lineNumber":-1、 "className": "com.sun.proxy。$ Proxy137"、 "nativeMethod":false}、{"methodName": "invokeListener"、 "fileName ":" SimpleMessageListenerContainer.java "、" lineNumber ":1276、" className ":" org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer "、" nativeMethod ":false}、{" methodName ":" executeListener "、" fileName ":" AbstractMessageListenerContainer.java "、" lineNumber ":726、" className ":" org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer "、" nativeMethod ":false}、{" methodName ":" doReceiveAndExecute "、" fileName ":" SimpleMessageListenerContainer.java "、" lineNumber ":1219、" className ":" org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer "、" nativeMethod ":false}、{" methodName ":" receiveAndExecute "、" fileName ":" SimpleMessageListenerContainer.java "、" lineNumber ": 「$ 200」、「fileName」:「SimpleMessageListenerContainer.java」、「lineNumber」、「lineMumber」、「textMessageListenerContainer.java」、「textMessageListenerContainer.java」、「textMessageListenerContainer.java」、 : "" methodName ":" run "、" fileName ":" SimpleMessageListenerContainer.java "、" lineNumber ":97、" className ":" org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer "、" nativeMethod " : "" methodName ":" run "、" fileName ":" Thread.java "、" nativeMethodProcessingConsumer "、" nativeMethod ":false"、 "className": "org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer $ AsyncMessageProcessingConsumer" "lockedMonitors":[{"className": "org.postgresql.core.v3.QueryExecutorImpl"、 "identityHashCode":748、 "className": "java.lang.Thread"、 "nativeMethod":false} :1428002949、 "lockedStackDepth":9、 "lockedStackFrame":{"methodName": "execute"、 "fileName": "QueryExecutorImpl.java"、 "lineNumber":288、 "className": "org.postgresql.core.v3 .QueryExecutorImpl "、" nativeMethod ":false}}]" lockedSynchronizers ":[{" className ":" java.ut il.concurrent.locks.ReentrantReadWriteLock $ NonfairSync」、 "identityHashCode":1110565932}]、 "LOCKINFO":ヌル}

+0

使用しているコードをコピー&ペーストできますか? – db80

+0

コードを追加しました。不足しているものがあれば教えてください。 – jc00der

答えて

0

あなたがその動作を確認する理由それは明確ではありません。ほとんどの場合(私の経験上)、このような問題は、リスナースレッドがユーザコードに「つぶれた」ことによって引き起こされます。消費者スレッドがそのように「アイドル」になることは不可能です。いずれにしても、15分後に再起動しません。

次のステップは、スレッドが何をしているのかを見るためにスレッドダンプを取ることです。 jstackまたはVisualVMを使用できない場合、起動するには/dumpエンドポイントを使用します。

+0

ゲイリー、ハートビートにあなたの他の[投稿](http://forum.spring.io/forum/spring-projects/integration/amqp/724928-consumers-stops-consuming-no-exception-or-warnings)を見ました私たちはそれを試すつもりです。 – jc00der

+0

しかし、メッセージはunackされているので、正しい方向であるかどうかは疑問です。 – jc00der

+0

問題が発生したときにスレッドダンプを取得しました。それは役に立ちますか? – jc00der

関連する問題