WSO2 ESB:地址端点在后端恢复后不恢复发送
WSO2 ESB: Address endpoint does not resume sending after backends recovery
我正在将 WSO2 ESB 与 RabbitMQ 一起使用,我有两个代理服务:
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>
您必须在 axis2.xml
中更改 rabbitmq 的 transportReceiver 中的以下参数
<parameter name="rabbitmq.connection.retry.count" locked="false">5</parameter>
"rabbitmq.connection.retry.count" 是每次重试后尝试重新连接的次数,我想你已经将它设置为 5,这就是为什么在尝试五次后连接断开的原因。调大参数试试
这是 ESB 4.8.1 新包中存在的已知错误。后来我们修好了。因此,我建议您切换到已解决此问题的 ESB 4.9.0 版本。
[1] https://docs.wso2.com/display/ESB490/Downloading+the+Product
我正在将 WSO2 ESB 与 RabbitMQ 一起使用,我有两个代理服务:
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>
您必须在 axis2.xml
中更改 rabbitmq 的 transportReceiver 中的以下参数<parameter name="rabbitmq.connection.retry.count" locked="false">5</parameter>
"rabbitmq.connection.retry.count" 是每次重试后尝试重新连接的次数,我想你已经将它设置为 5,这就是为什么在尝试五次后连接断开的原因。调大参数试试
这是 ESB 4.8.1 新包中存在的已知错误。后来我们修好了。因此,我建议您切换到已解决此问题的 ESB 4.9.0 版本。
[1] https://docs.wso2.com/display/ESB490/Downloading+the+Product