尝试为保证交付提供可行的解决方案。在内存中。
创建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>
问题:
通过PostMan我以JSON格式发送请求,但是当我打开InMemMessageStore时,消息是XML格式的?!?为什么呢?
端点期望JSON格式的消息。可能这是失败的原因但是在日志中我看到了类似
无法通过故障序列发送消息。序列名称不存在。
故障序列是强制性的还是抱怨的,因为我根本没有定义任何默认的错误序列?
也
无法将viaPost发送到网址[http://xxx.xxx.xx.xx/InsertInvoiceVehicleList/ sendMessage ]
为什么&#39; sendMessage&#39; (这是在API中定义的uritemplate添加到端点网址上?!?!)
所以:这里最大的问题是如何保持JSON格式的消息以及如何保持端点网址的完整性......
答案 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
所有分叉
我希望对于面临同样问题的其他人来说,这可能会有一些相同的时间