WSO2保证传送消息在内存中

时间:2017-07-21 19:59:59

标签: wso2 wso2esb

尝试为保证交付提供可行的解决方案。在内存中。

创建InMemoryStore InMemMessageStore ,创建并指向插入内容 创建API,使代码如下所示:

序列:

<?xml version="1.0" encoding="UTF-8"?> <sequence name="InMMSsequence" xmlns="http://ws.apache.org/ns/synapse">
    <log level="custom">
        <property name="STATE" value="message is sent to InMemMessageStore"/>
    </log>
    <property name="FORCE_SC_ACCEPTED" scope="axis2" type="STRING" value="True"/>
    <axis2ns12:store messageStore="InMemMessageStore" xmlns:axis2ns12="http://ws.apache.org/ns/synapse"/> </sequence>

我的API看起来像:

 <resource methods="POST" uri-template="/sendMessage">
      <inSequence>
         <sequence key="InMMSsequence"/>
      </inSequence>
      <outSequence/>
      <faultSequence/>
   </resource>

消息处理器:

<messageProcessor name="MySMessageProcessor" class="org.apache.synapse.message.processor.impl.forwarder.ScheduledMessageForwardingProcessor" targetEndpoint="InsertInvoice" messageStore="InMemMessageStore" xmlns="http://ws.apache.org/ns/synapse">
   <parameter name="interval">1000</parameter>
   <parameter name="client.retry.interval">1000</parameter>
   <parameter name="max.delivery.attempts">4</parameter>
   <parameter name="is.active">true</parameter>
   <parameter name="max.delivery.drop">Disabled</parameter>
   <parameter name="member.count">1</parameter>
</messageProcessor>

并指出:

   <endpoint xmlns="http://ws.apache.org/ns/synapse"
    name="InsertInvoice">    
<http  uri-template="http://xxxx.xxx.xxx.xxx/InsertInvoiceVehicleList"
    method="post">
           <suspendOnFailure>
              <progressionFactor>1.0</progressionFactor>
           </suspendOnFailure>
           <markForSuspension>
              <retriesBeforeSuspension>0</retriesBeforeSuspension>
              <retryDelay>0</retryDelay>
           </markForSuspension>    </http> </endpoint>

问题:

  1. 通过PostMan我以JSON格式发送请求,但是当我打开InMemMessageStore时,消息是XML格式的?!?为什么呢?

  2. 端点期望JSON格式的消息。可能这是失败的原因但是在日志中我看到了类似

  3. 的内容

    无法通过故障序列发送消息。序列名称不存在。

    故障序列是强制性的还是抱怨的,因为我根本没有定义任何默认的错误序列?

    无法将viaPost发送到网址[http://xxx.xxx.xx.xx/InsertInvoiceVehicleList/ sendMessage ]

    为什么&#39; sendMessage&#39; (这是在API中定义的uritemplate添加到端点网址上?!?!)

    所以:这里最大的问题是如何保持JSON格式的消息以及如何保持端点网址的完整性......

1 个答案:

答案 0 :(得分:1)

我发现了问题,我想与其他人分享......

<强> 1。从API调用结束点在末尾添加postfix会产生错误

默认情况下,URI模板&#39; sendMessage&#39;发送消息时将附加到目标URL。您需要在序列中使用以下属性从目标URL中删除URI模板

<property action="remove" name="REST_URL_POSTFIX" scope="axis2"/>. 

<强> 2。消息处理器无法将消息发送到终点

我的终点是api .net web服务,问题是HTTP 1.1分块,不得不禁用它,因为.NET服务不支持它。 此设置位于axis2_blocking_client.xml和axis2_client.xml

    <parameter name="Transfer-Encoding">chunked</parameter>

第3。消息处理器无法将消息发送到终点

我的第二个终点是servicestack web服务,我使用了

这样的终点
http://xxxx.xxx.xxx.xxx/TMSALSvc/UpdateStatus

但问题是我需要指定响应格式。有一次,当我把一个EndPoint delaration像

http://xxx.xxx.xxx.xx/TMSALSvc/json/reply/UpdateStatus

所有分叉

我希望对于面临同样问题的其他人来说,这可能会有一些相同的时间