2010-02-23 52 views
0

我們有一個jboss esb服務器,它以預定的方式(計劃頻率爲20秒)從文件系統中讀取文件,並將它們轉換爲esb消息,然後解析消息。jboss-esb fs-listener jbm消息隊列溢出

在esb服務器上還配置了一些其他提供者/監聽器(jms)和服務。當其中一個服務出現錯誤時,會影響上述過程。文件系統提供者(網關)工作正常,但接受網關消息的jms-listener不工作,並且大量消息在jbm隊列(jbm_msg Oracle數據庫表)中累積。

問題是,當我的服務器重新啓動時,在esb中解析了jbm-queue中的消息僅僅20秒,這是fs-provider的調度頻率,再也不會處理消息,並且cpu使用率高達100 %,並停留在那裏。我們相信fs提供商會中斷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

回答

0

將服務拆分爲2個獨立的服務,一個處理JMS隊列,另一個處理文件輪詢器。指定相同的操作管道。這樣你就可以獲得相同的功能,但沒有線程問題。還可以在偵聽器上使用max-threads attr來指定讀取線程的數量。