2014-11-24 2 views
3

Я использую apache для работы в очередях. Мы начали видеть следующее исключение очень часто при написании вещей в очереди:org.apache.activemq.transport.InactivityIOException: не удается отправить, канал уже сбой

Caused by: org.apache.activemq.transport.InactivityIOException: Cannot send, channel has already failed: 
    at org.apache.activemq.transport.AbstractInactivityMonitor.doOnewaySend(AbstractInactivityMonitor.java:282) 
    at org.apache.activemq.transport.AbstractInactivityMonitor.oneway(AbstractInactivityMonitor.java:271) 
    at org.apache.activemq.transport.TransportFilter.oneway(TransportFilter.java:85) 
    at org.apache.activemq.transport.WireFormatNegotiator.oneway(WireFormatNegotiator.java:104) 
    at org.apache.activemq.transport.MutexTransport.oneway(MutexTransport.java:68) 
    at org.apache.activemq.transport.ResponseCorrelator.asyncRequest(ResponseCorrelator.java:81) 
    at org.apache.activemq.transport.ResponseCorrelator.request(ResponseCorrelator.java:86) 
    at org.apache.activemq.ActiveMQConnection.syncSendPacket(ActiveMQConnection.java:1366) 

Я не могу понять, что может быть причиной this-- или даже, честно говоря, с чего начать отладку, что является причиной этого ,

Здесь очереди настроить код:

camelContext = new DefaultCamelContext(); 
    camelContext.setErrorHandlerBuilder(new LoggingErrorHandlerBuilder()); 
    camelContext.getShutdownStrategy().setTimeout(SHUTDOWN_TIMEOUT_SECONDS); 

    routePolicy = new RoutePolicy(); 
    routePolicy.setCamelContext(camelContext); 

    ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(); 
    connectionFactory.setBrokerURL(queueUri); 
    // use a pooled connection factory between the module and the queue 
    pooledConnectionFactory = new PooledConnectionFactory(connectionFactory); 

    // how many connections should there be in the session pool? 
    pooledConnectionFactory.setMaxConnections(this.maxConnections); 
    pooledConnectionFactory.setMaximumActiveSessionPerConnection(this.maxActiveSessionPerConnection); 
    pooledConnectionFactory.setCreateConnectionOnStartup(true); 
    pooledConnectionFactory.setBlockIfSessionPoolIsFull(false); 

    JmsConfiguration jmsConfiguration = new JmsConfiguration(pooledConnectionFactory); 
    jmsConfiguration.setDeliveryPersistent(false); // do not store a copy of the messages on the queue 

    ActiveMQComponent activeMQComponent = ActiveMQComponent.activeMQComponent(queueUri); 
    activeMQComponent.setConfiguration(jmsConfiguration); 
    camelContext.addComponent("activemq", activeMQComponent); 
    Component activemq = camelContext.getComponent("activemq"); 

    // register endpoints for queues and topics 
    Endpoint queueEndpoint = activemq.createEndpoint("activemq:queue:polaris.*"); 
    Endpoint topicEndpoint = activemq.createEndpoint("activemq:topic:polaris.*"); 
    producerTemplate = camelContext.createProducerTemplate(); 

    camelContext.start(); 
    queueEndpoint.start(); 
    topicEndpoint.start(); 

Как я уже говорил, ошибка не предполагает каких-либо направлений отладки, и это не происходит в 100% случаев, когда я могу быть уверен, моя конфигурация настроена неправильно.

+0

Как вы создали маршрут верблюда? Вы только что использовали sampleTemplate для отправки сообщения в очередь? –

+1

Если вы резко сокращаете количество активных сеансов на соединение, проблема устраняется или возникает реже? Вы отправляете сообщения с высокой скоростью или существуют периоды бездействия? Посмотрите на [монитор неактивности] (http://activemq.apache.org/activemq-inactivitymonitor.html). – Ralf

+0

Я думаю, вы на что-то, @ Ralf. Я обнаружил множество ошибок «превышение максимальных подключений», поэтому я увеличил максимальное количество подключений, и с тех пор я не видел этих ошибок. – Denise

ответ

0

Проверьте, есть ли клиент, не работающий с JMS, pinging вашего брокера JMS. Это может быть инструмент внешнего мониторинга, инструмент балансировки нагрузки, такой как keepalived, или другой.

+0

Я его не вижу. Спасибо за эту мысль! – Denise

+0

@Denise Как вы это подтвердили? Вы можете изменить свой порт и посмотреть, не произошло ли исключение. –

1

Недавно я столкнулся с той же проблемой. Я нашел это https://issues.apache.org/jira/browse/AMQ-6600

Apache ActiveMQ клиент бросает InactivityIOException, когда одна из банок отсутствует в пути к классам. В моем случае это был hawtbuf-1.11.jar. Когда я добавил эту банку в classpath, она начала работать без ошибок.

Смежные вопросы