WSO2 ESB入站JMS端点聚类问题

时间:2018-01-04 11:43:40

标签: wso2 jms activemq wso2esb

我在使用WSO2 ESB入站端点时遇到了一些问题。对于我在documentation中看到的,这个属性

<parameter name="coordination">true</parameter>

强制在集群的其中一个工作节点中执行入站端点。如果所选节点已关闭,则另一个工作节点将启动入站端点

我有一个包含两个工作节点和一个管理器节点的集群。群集是按照AWS模式instructions配置的,并且工作正常。 我也有一个JMS入站端点,这样配置

<inboundEndpoint name="INB_Q1" onError="ARQ.ERROR" protocol="jms" sequence="INB_Q1_FunINB" suspend="false" xmlns="http://ws.apache.org/ns/synapse">
<parameters>
    <parameter name="interval">100</parameter>
    <parameter name="sequential">true</parameter>
    <parameter name="coordination">true</parameter>
    <parameter name="transport.jms.Destination">INB_Q1</parameter>
    <parameter name="transport.jms.CacheLevel">3</parameter>
    <parameter name="transport.jms.ConnectionFactoryJNDIName">QueueConnectionFactory</parameter>
    <parameter name="java.naming.factory.initial">org.apache.activemq.jndi.ActiveMQInitialContextFactory</parameter>
    <parameter name="java.naming.provider.url">@activemq_failover</parameter>
    <parameter name="transport.jms.SessionAcknowledgement">AUTO_ACKNOWLEDGE</parameter>
    <parameter name="transport.jms.SessionTransacted">false</parameter>
    <parameter name="transport.jms.ConnectionFactoryType">queue</parameter>
    <parameter name="transport.jms.ContentType">application/json</parameter>
    <parameter name="transport.jms.SharedSubscription">false</parameter>
</parameters>

当我启动集群时,一切正常。轮询(JMS)端点的计划任务仅在一个节点中启动,我在ActiveMQ队列中只看到一个使用者。

然后我关闭执行任务的节点,群集得到通知,计划任务在剩余的活动节点中启动。它保持良好的工作状态。

现在我重新启动之前关闭的节点 ,这是问题 。此节点再次启动计划任务,两个工作程序执行相同的入站端点,并且我有两个使用者用于同一队列。

知道为什么会这样吗?也许我错过了一些任务管理器配置?这可能是个错误吗?

感谢。

1 个答案:

答案 0 :(得分:1)

在群集设置中,当您要配置database时,您可能会找到有关“在管理器和工作线程节点上安装注册表”的说明。在此之下,它可能会指示您为工作节点添加以下内容:

<remoteInstance url="https://localhost:9443/registry">
    <id>instanceid</id>
    <dbConfig>sharedregistry</dbConfig>
    <readOnly>true</readOnly>
    <enableCache>true</enableCache>
    <registryRoot>/</registryRoot>
    <cacheId>regadmin@jdbc:mysql://carbondb.mysql-wso2.com:3306/REGISTRY_DB?autoReconnect=true</cacheId>
</remoteInstance>

应该有轻微的变化。由于在两个工作节点中添加了相同的配置,因此它们都尝试在数据库中编写注册表配置。因此,任务配置将重新开始,并在重新启动一个节点时开始新进程。

所以请在一个节点中更改以下内容:

<remoteInstance url="https://localhost:9443/registry">
    <id>instanceid</id>
    <dbConfig>sharedregistry</dbConfig>
    <readOnly>false</readOnly>
    <enableCache>true</enableCache>
    <registryRoot>/</registryRoot>
    <cacheId>regadmin@jdbc:mysql://carbondb.mysql-wso2.com:3306/REGISTRY_DB?autoReconnect=true</cacheId>
</remoteInstance>

我们所做的改变如下:

 <readOnly>false</readOnly>

如果您有多个工作节点,则应禁用除一个节点之外的其他节点中的readOnly属性。

这不是错误,此配置更改将解决您的问题。