【发布时间】:2017-07-28 22:56:39
【问题描述】:
我在WSO2 Message Broker 的queue 中使用API 的WSO2 ESB 插入了一些json 内容:
<?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>
在这个API 中,我迭代了endpoint 的json 响应,并使用这个sequence 在一个Message Broker's queue 中插入了订单:
<?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&java.naming.factory.initial=org.wso2.andes.jndi.PropertiesFileInitialContextFactory&java.naming.provider.url=repository/conf/jndi.properties&transport.jms.DestinationType=queue"/>
</endpoint>
</send>
</sequence>
然后,我在WSO2 ESB 创建了一个Message Processor,因为我想在orders_mb queue 上使用这些消息,然后在另一个sequence 中使用。这是Message Store和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>
最后,这里是Message Processor发送queue的消息的sequence:
<?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>
当我调用API resource 将订单插入queue 时,它可以工作。但是,当Message Processor 消费时,它会注销
[2017-07-13 10:06:34,856] 警告 - JmsConsumer [orders_mb-C-1]。没有收到 javax.jms.ObjectMessage
我不知道出了什么问题,我看到this 的问题询问了同样的问题,但是,我已经插入了强制性的属性,但它还没有在这里工作。
【问题讨论】:
标签: api wso2 wso2esb mq wso2mb