WSO2 ESB:后端恢复后地址端点不恢复发送
Posted
技术标签:
【中文标题】WSO2 ESB:后端恢复后地址端点不恢复发送【英文标题】:WSO2 ESB: Address endpoint does not resume sending after backends recovery 【发布时间】:2015-10-10 11:14:51 【问题描述】:我在 RabbitMQ 中使用 WSO2 ESB,我有两个代理服务:
AMQPProducerSample
,它通过HTTP传输接收消息并将其发送到RabbitMQ队列
AMQPProxy
它作为 RabbitMQ 队列的消费者(通过 rabbitmq 传输),消费的消息被发送到 HTTP 端点 SampleEndPoint
除了一种情况外,一切正常:
-
我在
SampleEndPoint
中设置的后端服务出现故障。
新消息到达并通过AMQPProducerSample
发布,传递失败(这是预期的,因为我的后端已关闭)。在控制台中我可以看到:
WARN - ConnectCallback Connection refused or failed for : mfb.localhost/127.0.0.1:80
WARN - FaultHandler ERROR_CODE : 101503
WARN - FaultHandler ERROR_MESSAGE : Error connecting to the back end
WARN - FaultHandler ERROR_DETAIL : Error connecting to the back end
WARN - FaultHandler ERROR_EXCEPTION : null
WARN - FaultHandler FaultHandler : Endpoint [SampleEndPoint]
我的后端服务恢复并可用
新消息到达并通过AMQPProducerSample
发布,但我的端点不再收到任何消息。仅当未传递的消息数低于 5 时,它才能正常工作。在这种情况下,消息会成功传递到后端服务。在 5 (五) 封未送达的邮件后,送达总是停止工作。
如何解决这个问题?我需要设置或更改任何选项以使其始终有效吗?
我正在使用 WSO2 ESB 4.8.1
以下是我的完整配置:
<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://ws.apache.org/ns/synapse">
<registry provider="org.wso2.carbon.mediation.registry.WSO2Registry">
<parameter name="cachableDuration">15000</parameter>
</registry>
<proxy name="AMQPProxy"
transports="rabbitmq"
startOnLoad="true"
trace="enable">
<description/>
<target>
<inSequence>
<log level="full"/>
<property name="OUT_ONLY" value="true"/>
<property name="FORCE_SC_ACCEPTED" value="true" scope="axis2"/>
<send>
<endpoint key="SampleEndPoint"/>
</send>
</inSequence>
</target>
<parameter name="rabbitmq.queue.name">queue</parameter>
<parameter name="rabbitmq.connection.factory">AMQPConnectionFactory</parameter>
<parameter name="rabbitmq.exchange.name">exchange</parameter>
<parameter name="rabbitmq.queue.routing.key">route</parameter>
</proxy>
<proxy name="AMQPProducerSample"
transports="http"
startOnLoad="true"
trace="disable">
<description/>
<target>
<inSequence>
<property name="OUT_ONLY" value="true"/>
<property name="FORCE_SC_ACCEPTED" value="true" scope="axis2"/>
<property name="NO_KEEPALIVE" value="true" scope="axis2"/>
<send>
<endpoint>
<address uri="rabbitmq:/AMQPProxy?rabbitmq.server.host.name=localhost&rabbitmq.server.port=5672&rabbitmq.queue.name=queue&rabbitmq.queue.routing.key=route&rabbitmq.exchange.name=exchange"/>
</endpoint>
</send>
</inSequence>
<outSequence>
<send/>
</outSequence>
</target>
</proxy>
<endpoint name="SampleEndPoint">
<address uri="http://mfb.localhost/">
<timeout>
<duration>1000</duration>
<responseAction>discard</responseAction>
</timeout>
<suspendOnFailure>
<errorCodes>-1</errorCodes>
<progressionFactor>1.0</progressionFactor>
</suspendOnFailure>
<markForSuspension>
<errorCodes>-1</errorCodes>
</markForSuspension>
</address>
</endpoint>
<sequence name="fault">
<log level="full">
<property name="MESSAGE" value="Executing default 'fault' sequence"/>
<property name="ERROR_CODE" expression="get-property('ERROR_CODE')"/>
<property name="ERROR_MESSAGE" expression="get-property('ERROR_MESSAGE')"/>
</log>
<drop/>
</sequence>
<sequence name="main">
<in>
<log level="full"/>
<filter source="get-property('To')" regex="http://localhost:9000.*">
<send/>
</filter>
</in>
<out>
<send/>
</out>
<description>The main sequence for the message mediation</description>
</sequence>
</definitions>
【问题讨论】:
【参考方案1】:这是 ESB 4.8.1 新包中的一个已知错误。后来我们修复了它。因此,我建议您切换到已修复此问题的 ESB 4.9.0 版本。
[1]https://docs.wso2.com/display/ESB490/Downloading+the+Product
【讨论】:
我很惊讶以前版本 (4.8.1) 中的补丁没有修复如此严重的错误。无论如何,我们按照您的建议将 ESB 升级到了最新版本 (4.9.0)。 此错误已通过 ESB 4.8.1 版本中的补丁修复。 你能告诉我它是在哪个补丁中修复的吗?我刚刚应用了我在这里找到的所有补丁:maven.wso2.org/nexus/content/groups/wso2-public/org/wso2/carbon/… 但问题仍然存在于 4.8.1 这些补丁不向公众提供。它仅适用于获得生产支持的人员。【参考方案2】:您必须在axis2.xml中为rabbitmq更改transportReceiver中的以下参数
<parameter name="rabbitmq.connection.retry.count" locked="false">5</parameter>
“rabbitmq.connection.retry.count”是每次重试后尝试重新连接的次数,我认为您已将其设置为5,这就是五次尝试后连接断开的原因。增加参数值试试看。
【讨论】:
不幸的是它不起作用。据我了解,此选项适用于 ESB 和 RabbitMQ 服务器之间的连接。就我而言,ESB(HTTP 端点)和我的后端服务器之间存在问题。 我今天做了一些调试(ESB 在调试模式下运行),我发现连接线程不会从线程轮询中删除,以防万一失败。线程轮询大小被硬编码为 5 个线程,因此在 5 次失败后交付停止工作。 似乎,不支持 ESB 4.8.1 新副本,后来通过官方补丁修复了这个问题,所以没有补丁我们无法添加参数“以上是关于WSO2 ESB:后端恢复后地址端点不恢复发送的主要内容,如果未能解决你的问题,请参考以下文章
亚马逊EC2服务器重启后,IP地址发送了变化,如何恢复之前的IP地址?是需要联系客服还是在哪里可以配置?
为什么JSON路径无效为WSO2 ESB 5.0的JSON请求