![](/img/trans.png)
[英]WSO2 ESB EI611 VFS ActionAfterProcess & ActionAfterFailure - options
[英]wso2 EI 611 ActiveMQ
ESB中已声明的消息存储
<?xml version="1.0" encoding="UTF-8"?>
<messageStore class="org.apache.synapse.message.store.impl.jms.JmsStore" name="MySQLStockAdjustment" xmlns="http://ws.apache.org/ns/synapse">
<parameter name="store.jms.destination">MySQLStockAdjustment</parameter>
<parameter name="store.failover.message.store.name">MySQLStockAdjustmentFailover</parameter>
<parameter name="store.jms.connection.factory">myQueueConnectionFactory</parameter>
<parameter name="store.producer.guaranteed.delivery.enable">true</parameter>
<parameter name="store.jms.cache.connection">false</parameter>
<parameter name="java.naming.factory.initial">org.apache.activemq.jndi.ActiveMQInitialContextFactory</parameter>
<parameter name="java.naming.provider.url">tcp://localhost:61616</parameter>
<parameter name="store.jms.JMSSpecVersion">1.1</parameter>
</messageStore>
我只想开始在其中存储消息,而不是使用代理从中读取消息..
代理很简单
<?xml version="1.0" encoding="UTF-8"?>
<proxy name="stockAdjustment" startOnLoad="true" transports="jms" xmlns="http://ws.apache.org/ns/synapse">
<target>
<inSequence>
<!-- get all data -->
<sequence key="AdjustmentContext"/>
<filter regex="MySQL" source="$ctx:StockSource">
<then>
<iterate expression="//request">
<target>
<sequence>
<property expression="//qty" name="qty" scope="default" type="STRING"/>
<property expression="//code" name="code" scope="default" type="STRING"/>
<log level="custom">
<property expression="fn:concat('parmams:Code: ' ,$ctx:code, ' ;Qty: ',$ctx:qty)" name="info"/>
</log>
<call blocking="true">
<endpoint key="StockAdjustmentEp"/>
</call>
</sequence>
</target>
</iterate>
</then>
<else/>
</filter>
</inSequence>
<outSequence>
<send/>
</outSequence>
<faultSequence>
</faultSequence>
</target>
<parameter name="transport.jms.Destination">MySQLStockAdjustment</parameter>
<parameter name="transport.jms.ConnectionFactory">myQueueConnectionFactory</parameter>
</proxy>
因此,当我通过Postman Im发送数据消息时,得到以下信息:
WARN {org.apache.axis2.transport.jms.JMSUtils}-无法确定JMS消息的大小; 不支持的消息类型:org.apache.activemq.command.ActiveMQObjectMessage {org.apache.axis2.transport.jms.JMSUtils}错误{org.apache.axis2.transport.base.BaseUtils}-不支持的JMS消息类型org.apache.activemq .command.ActiveMQObjectMessage {org.apache.axis2.transport.base.BaseUtils}错误{org.apache.axis2.transport.jms.JMSMessageReceiver}-未知的错误处理消息{org.apache.axis2.transport.jms.JMSMessageReceiver}
消息是
<soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope">
<soapenv:Body>
<StockAdjRequest>
<source>MySQL</source>
<request><qty>2</qty><code>PR2</code></request>
<request><qty>2</qty><code>PR2</code></request>
<request><qty>2</qty><code>PR2</code></request>
</StockAdjRequest>
</soapenv:Body>
</soapenv:Envelope>
我看到该消息以队列结尾,但是我无法通过ActiveMQ Web控制台读取它。
我整理了文档,发现可能存在一个问题,“ ...如果您在使用消息存储时使用ActiveMQ 5.12.2及更高版本,则需要在服务器启动时为JMS消息存储设置以下系统属性ESB配置文件可以正常工作。
-Dorg.apache.activemq.SERIALIZABLE_PACKAGES =“ *” ....“
但是我没有找到如何做的...任何人都可以帮助我吗?
在将消息存储在定义messageStore并使用存储介体的JMS队列中时,您不仅存储了消息中的“文本”有效负载,还对整个java MessageContext对象进行了序列化并将其存储为队列中的二进制消息。
要读取这样的消息,您需要使用消息处理器,您无法使用简单的JMS代理甚至jms入站端点来读取它。
而且您无法使用ActiveMQ控制台读取它,因为它无法反序列化它
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.