jboss-esb fs-listener Переполнение очереди сообщений jbm - PullRequest
0 голосов
/ 23 февраля 2010

У нас есть сервер jboss esb, который читает файлы из файловой системы по расписанию (запланированная частота 20 секунд) и преобразует их в сообщение esb, а затем анализирует сообщение.

На серверах esb настроены некоторые другие провайдеры / слушатели (jms) и службы. Когда в одной из служб возникает ошибка, это влияет на вышеуказанный процесс. Поставщик файловой системы (шлюз) работает нормально, но прослушиватель jms, который принимает сообщения шлюза, не работает, и большое количество сообщений накапливается в очереди jbm (таблица базы данных Oracle jbm_msg).

Вот проблема, когда мой сервер перезагружается, сообщения в jbm-очереди анализируются в esb всего за 20 секунд, что является запланированной частотой fs-провайдера, никогда не обрабатывает сообщения снова, и загрузка ЦП возрастает до 100%. и остается там. Мы считаем, что fs-provider прерывает работу jms-провайдера.

Есть ли какая-либо конфигурация, которую мы пропустили.

Вот файлы конфигурации, которые у нас есть: JBoss-esb.xml

<?xml version = "1.0" encoding = "UTF-8"?>
<jbossesb xmlns="http://anonsvn.labs.jboss.com/labs/jbossesb/trunk/product/etc/schemas/xml/jbossesb-1.0.1.xsd" parameterReloadSecs="5">
 <providers>  
  <fs-provider name="SitaIstProvider">
   <fs-bus busid="gw_sita_ist" >
    <fs-message-filter
     directory="/ikarussita/IST/IN"
     input-suffix=".RCV"
     work-suffix=".lck"
     post-delete="false"
     post-directory="/ikarussita/IST/OK"
     post-suffix=".ok"
     error-delete="false"
     error-directory="/ikarussita/IST/ERR"
     error-suffix=".err"/>
   </fs-bus>
  </fs-provider>

  <jms-provider name="SitaESBQueue" connection-factory="ConnectionFactory">
   <jms-bus busid="esb_sita_queue">
    <jms-message-filter dest-type="QUEUE" dest-name="queue/esb_sita_queue"/>
         </jms-bus>
  </jms-provider>  
 </providers>

 <services>
  <service category="SITA" name="SITA_IST" description="SITA Daemon For ISTCOXH">  
   <listeners>
    <fs-listener name="Sita_Ist_Gateway" busidref="gw_sita_ist" is-gateway="true" schedule-frequency="20" />
    <jms-listener name="Jms_Sita_EsbAware" busidref="esb_sita_queue" />
   </listeners>

   <actions mep="OneWay">
             <action name="parse_msg" class="com.celebi.integration.action.sita.inbound.SitaHandler" process="parseMessage" />
    <action name="send_ikarus" class="com.celebi.integration.action.ikarus.outbound.fis.FlightJmsSender" />
   </actions>
  </service>
 </services>
</jbossesb>

JBM-очереди service.xml

<?xml version="1.0" encoding="UTF-8"?>
<server>
    <mbean code="org.jboss.jms.server.destination.QueueService"
      name="jboss.messaging.destination:service=Queue,name=esb_sita_queue"
      xmbean-dd="xmdesc/Queue-xmbean.xml">
      <depends optional-attribute-name="ServerPeer">jboss.messaging:service=ServerPeer</depends>
      <depends>jboss.messaging:service=PostOffice</depends>
     </mbean>
<server>

deployment.xml

<jbossesb-deployment>
<depends>jboss.messaging.destination:service=Queue,name=esb_sita_queue</depends>
</jbossesb-deployment>

Thanx

1 Ответ

0 голосов
/ 11 марта 2010

Разделите службу на 2 отдельные службы, одна из которых обрабатывает очередь JMS, а другая - файл-поллер. Укажите тот же конвейер действий. Таким образом, вы получаете ту же функциональность, но без проблем с потоками. Также используйте max-threads attr на слушателе, чтобы указать количество читающих потоков.

...