簡體   English   中英

wso2 EI 611 ActiveMQ

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM