[jboss-user] [JBoss Messaging] - Bridge qos_once_and_only_once - XA Recovery - Lost Messages

Carlo Pacini do-not-reply at jboss.com
Mon May 24 09:31:16 EDT 2010


Carlo Pacini [http://community.jboss.org/people/jbosse] created the discussion

"Bridge qos_once_and_only_once - XA Recovery - Lost Messages"

To view the discussion, visit: http://community.jboss.org/message/544495#544495

--------------------------------------------------------------
Hi all,

i'm finding some trouble configuring XA Recovery and bridge with qos _once_and_only_once:

In this example i've deployed a queue (queuea) on jbm1 bridged with a queue (queueb) on jbm2 using qos once_and_only_once.

Following jbm 1.4.5 user guide, steps are :

1) Source and destination are on different server -> need to enlist sending and consuming session in JTA Transaction
2) Both supplied connection factories are XA 
3) Enable XA recovery with JBoss Transaction


On jbm1 (ServerPeerID 49) , RemoteJMSProvider definition:

<mbean code="org.jboss.jms.jndi.JMSProviderLoader" name="jboss.messaging:service=JMSProviderLoader,name=RemoteJMSProvider">
    <attribute name="ProviderName">RemoteJMSProvider</attribute>
    <attribute name="ProviderAdapterClass">org.jboss.jms.jndi.JNDIProviderAdapter</attribute>
    <!-- The combined connection factory -->
    <attribute name="FactoryRef">XAConnectionFactory</attribute>
    <!-- The queue connection factory -->
    <attribute name="QueueFactoryRef">XAConnectionFactory</attribute>
    <!-- The topic factory -->
    <attribute name="TopicFactoryRef">XAConnectionFactory</attribute>
    <attribute name="Properties">
       java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
       java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces
       java.naming.provider.url=ip.address.jbm.2:1099
    </attribute>
  </mbean>


queuea:

<mbean code="org.jboss.jms.server.destination.QueueService" name="jboss.messaging.destination:service=Queue,name=queuea" xmbean-dd="xmdesc/Queue-xmbean.xml">
    <depends optional-attribute-name="ServerPeer">jboss.messaging:service=ServerPeer</depends>
    <depends>jboss.messaging:service=PostOffice</depends>
  </mbean>


Bridge:

<mbean code="org.jboss.jms.server.bridge.BridgeService" name="jboss.messaging:service=Bridge,name=queueab" xmbean-dd="xmdesc/Bridge-xmbean.xml">
    <depends optional-attribute-name="SourceProviderLoader">jboss.messaging:service=JMSProviderLoader,name=JMSProvider</depends>
    <depends optional-attribute-name="TargetProviderLoader">jboss.messaging:service=JMSProviderLoader,name=RemoteJMSProvider</depends>
    <attribute name="SourceDestinationLookup">/queue/queuea</attribute>
    <attribute name="TargetDestinationLookup">/queue/queueb</attribute>
    <attribute name="QualityOfServiceMode">2</attribute>
    <attribute name="MaxBatchSize">1</attribute>
    <attribute name="MaxBatchTime">1000</attribute>
    <attribute name="FailureRetryInterval">5000</attribute>
    <attribute name="MaxRetries">-1</attribute>
    <attribute name="AddMessageIDInHeader">false</attribute>
  </mbean>

On jbm2 (ServerPeerID 51)  queueb:

<mbean code="org.jboss.jms.server.destination.QueueService" name="jboss.messaging.destination:service=Queue,name=queueb" xmbean-dd="xmdesc/Queue-xmbean.xml">
    <depends optional-attribute-name="ServerPeer">jboss.messaging:service=ServerPeer</depends>
    <depends>jboss.messaging:service=PostOffice</depends>
  </mbean>



Enable XA recovery with JBoss Transactions, added in jbossjta-properties.xml of jbm1 and jbm2:

<property name="com.arjuna.ats.jta.recovery.XAResourceRecovery.JBMESSAGING1"
           value="org.jboss.jms.server.recovery.MessagingXAResourceRecovery;java:/DefaultJMSProvider"/>


Seems that sending messages to queuea and simulating a crash ( kill -9 pidjbm ) cause that some message are lost and not arrive on queueb.

Step to reproduce:

- started instances jbm1 and jbm2 (JBoss 4.2.3 with messaging 1.4.5, persistence on oracle db 11.2 ) on different linux server with queue and bridge definition
- sending 1000 messaging on queuea with jmeter
- while message are in transit from jbm1 to jbm2 , kill -9 jbm1
- wait a couple of minutes
- kill -9 jbm2
- start  jbm1
- start  jbm2
- wait 10 minutes
- looking on queueb via jmx-console there're 999 messages.

On db seems there's a stuck transaction:

SQL> select count(*) from jbm1.jbm_msg;
  COUNT(*)
----------
         1
SQL> select count(*) from jbm1.jbm_msg_ref;
  COUNT(*)
----------
         0
SQL> select count(*) from  jbm1.jbm_tx;
  COUNT(*)
----------
         0
SQL>  select count(*) from  jbm2.jbm_msg;
  COUNT(*)
----------
      1000
SQL> select count(*) from  jbm2.jbm_msg_ref;
  COUNT(*)
----------
      1000
SQL> select count(*) from  jbm2.jbm_tx;
  COUNT(*)
----------
         1


In jbm1 server.log see:

2010-05-24 13:46:03,483 WARN  [com.arjuna.ats.jta.logging.loggerI18N] [com.arjuna.ats.internal.jta.resources.arjunacore.norecoveryxa] [com.arjuna.ats.interna
l.jta.resources.arjunacore.norecoveryxa] Could not find new XAResource to use for recovering non-serializable XAResource < 131075, 29, 27, 1--3f578bcf:b0e5:4
bfa6494:96a-3f578bcf:b0e5:4bfa6494:96b^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
^@^@^@^@^@^@^@^@^@^@^@^@^@ >

or in another case:

SQL> select count(*) from jbm1.jbm_msg;
  COUNT(*)
----------
         1
SQL> select count(*) from jbm1.jbm_msg_ref;
  COUNT(*)
----------
         1
SQL> select count(*) from jbm1.jbm_tx;
  COUNT(*)
----------
         1
SQL> select count(*) from jbm2.jbm_msg;
  COUNT(*)
----------
      1000
SQL> select count(*) from jbm2.jbm_msg_ref;
  COUNT(*)
----------
      1000
SQL> select count(*) from jbm2.jbm_tx;
  COUNT(*)
----------
         1

jbm1 server.log :

2010-05-24 14:20:46,882 DEBUG [com.arjuna.ats.jta.logging.loggerI18N] [com.arjuna.ats.internal.jta.recovery.info.notrollback] Told not to rollback < 131075,
1--3f578bcf:e8cc:4bfa6b9d:a2e, -3f578bcf:e8cc:4bfa6b9d:a2f >

Same behaviour, send 1000 message on queuea, crash, 999 arrive on queueb.

Seems that records remain forever on db  (no tansaction replication nor cleanup), suspect a configuration issue.
Looking the steps on user guide and on the wiki  http://community.jboss.org/wiki/JBMBridgeConfiguration http://community.jboss.org/wiki/JBMBridgeConfiguration i've not found the error.

There're other steps to follow to configure bridge, qos once_and_only_once and xa recovery that i miss?

Thanks in advance,

Carlo

--------------------------------------------------------------

Reply to this message by going to Community
[http://community.jboss.org/message/544495#544495]

Start a new discussion in JBoss Messaging at Community
[http://community.jboss.org/choose-container!input.jspa?contentType=1&containerType=14&container=2042]

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/jboss-user/attachments/20100524/49c71eda/attachment-0001.html 


More information about the jboss-user mailing list