WSO2 esb作为具有故障转移传输超时的{jms生成器

时间:2018-06-01 17:05:00

标签: wso2 timeout jms esb producer

使用wso2 esb 4.9.0,我希望在JMS队列(activemq)中有一个HTTP api推送消息。 jms send应该使用故障转移,但如果没有activemq代理可用,它应该在超时后执行faultsequence(例如15 secondes)(在故障序列中,http响应应该发送到原始客户端,带有http错误代码500和JSON正文)

我尝试将以下网址用于我的activemq连接工厂:

<parameter name="java.naming.provider.url" locked="false">failover:(tcp://localhost:61616)?timeout=3000</parameter>

我也尝试在api.xml中的uri中设置timeout参数(省略其他参数):

<send>
    <endpoint>
        <address uri="jms:/MyQueue?java.naming.provider.url=failover:(tcp://localhost:616161)?timeout=3000"/>
    </endpoint>
</send>

当我杀死所有activemq经纪人时,我的api仍无限期地阻止:

curl -XPOST -H "Content-Type: application/json" -d '{}' -k "https://localhost:8243/myApi/send"
^C # I have to kill it manually; instead it should return an error

如何使用wso2 esb实现此功能?

有关timeout参数的文档,请参阅activemq failover transport reference:http://activemq.apache.org/failover-transport-reference.html

  

注释

     

在故障转移传输下,默认情况下,当代理变为不可用时,发送操作将无限期地阻止。有两种方法可用于处理此方案。首先,直接在ActiveMQConnectionFactory上设置TransportListener,以便在任何可能需要网络跃点或秒的请求之前将其设置到位,设置超时选项。超时选项会导致当前发送操作在指定的超时后失败。

     

示例:

     

故障切换:(TCP://主:61616)超时= 3000

?      

在此示例中,如果未建立连接,则发送操作将在3秒后超时。请务必注意,发生超时时不会终止连接。因此,一旦代理可用,就可以稍后使用相同的连接重新发送受影响的消息。

2 个答案:

答案 0 :(得分:0)

尝试使用 在发送调解员之前<property name="ClientApiNonBlocking" action="remove" scope="axis2"/>

答案 1 :(得分:0)

在我的情况下,这是一个连接创建,因此设置startupMaxReconnectAttempts = X允许我在多次重新连接尝试后“超时”。使用默认设置(指数退避),约5秒后X = 10超时值。所以我用了

<address uri="jms:/MyQueue?java.naming.provider.url=failover:(tcp://localhost:616161)?startupMaxReconnectAttempts=10"/>