2017-07-13 4 views
0

J'inséré un contenu json dans un queue de WSO2 Message Broker en utilisant un API de WSO2 ESB:WSO2 ESB message Processeur: N'a pas reçu javax.jms.ObjectMessage

<?xml version="1.0" encoding="UTF-8"?> 
<inSequence xmlns="http://ws.apache.org/ns/synapse"> 
    <property name="Accept" scope="transport" type="STRING" value="application/json"/> 
    <call> 
     <endpoint> 
      <http method="GET" uri-template="http://localhost:9769/services/orderApi/orders"/> 
     </endpoint> 
    </call> 
    <iterate continueParent="true" expression="//orders/order"> 
     <target sequence="insertOrdersMQ"/> 
    </iterate> 
    <respond/> 
</inSequence> 

Dans ce API, j'Iterated à la réponse json du endpoint et insérés les commandes dans un Message Broker's queue utilisant ce sequence:

<?xml version="1.0" encoding="UTF-8"?> 
<sequence name="insertOrdersMQ" xmlns="http://ws.apache.org/ns/synapse"> 
    <log level="custom"> 
     <property name="Log: " value="Inserting order on queue"/> 
    </log> 
    <property name="OUT_ONLY" value="true"/> 
    <property name="FORCE_SC_ACCEPTED" scope="axis2" value="true"/> 
    <send> 
     <endpoint> 
      <address uri="jms:/orders_mb?transport.jms.ConnectionFactoryJNDIName=QueueConnectionFactory&amp;java.naming.factory.initial=org.wso2.andes.jndi.PropertiesFileInitialContextFactory&amp;java.naming.provider.url=repository/conf/jndi.properties&amp;transport.jms.DestinationType=queue"/> 
     </endpoint> 
    </send> 
</sequence> 

Ensuite, je créé un Message Processor à WSO2 ESB, parce que je veux consommer ces messages sur orders_mb queue et utiliser ensuite dans un autre sequence. Voici le code du Message Store et Message Processor:

<messageStore name="orders_Store" class="org.apache.synapse.message.store.impl.jms.JmsStore" xmlns="http://ws.apache.org/ns/synapse"> 
    <parameter name="java.naming.factory.initial">org.wso2.andes.jndi.PropertiesFileInitialContextFactory</parameter> 
    <parameter name="java.naming.provider.url">repository/conf/jndi.properties</parameter> 
    <parameter name="store.jms.destination">orders_mb</parameter> 
    <parameter name="store.jms.JMSSpecVersion">1.1</parameter> 
    <parameter name="store.producer.guaranteed.delivery.enable">false</parameter> 
    <parameter name="store.failover.message.store.name">orders_mb</parameter> 
</messageStore> 


<messageProcessor name="ordersProcessor" class="org.apache.synapse.message.processor.impl.sampler.SamplingProcessor" messageStore="orders_Store" xmlns="http://ws.apache.org/ns/synapse"> 
    <parameter name="interval">1000</parameter> 
    <parameter name="concurrency">1</parameter> 
    <parameter name="sequence">insertOrdersDB</parameter> 
    <parameter name="is.active">true</parameter> 
</messageProcessor> 

Enfin, voici le sequence que le Message Processor envoyer le message du queue:

<?xml version="1.0" encoding="UTF-8"?> 
<sequence name="insertOrdersDB" xmlns="http://ws.apache.org/ns/synapse"> 
    <log level="full"> 
     <property name="Log: " value="Removing order from queue"/> 
    </log> 
</sequence> 

Quand j'appelle l'API resource pour insérer les commandes dans queue, ça marche. Cependant, lorsque le Message Processor consommera, il se déconnecte

[13/07/2017 10: 06: 34856] WARN - JmsConsumer [orders_mb-C-1]. N'a pas reçu un javax.jms.ObjectMessage

Je ne sais pas ce qui se passait mal, et j'ai vu this question qui pose des questions sur le même problème, cependant, je l'ai déjà inséré les propriétés qui sont obligatoires et non travaillé ici encore.

Répondre

0

Essayez d'utiliser le médiateur des appels en mode blocage.