我在使用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队列中只看到一个使用者。
然后我关闭执行任务的节点,群集得到通知,计划任务在剩余的活动节点中启动。它保持良好的工作状态。
现在我重新启动之前关闭的节点 ,这是问题 。此节点再次启动计划任务,两个工作程序执行相同的入站端点,并且我有两个使用者用于同一队列。
知道为什么会这样吗?也许我错过了一些任务管理器配置?这可能是个错误吗?
感谢。
答案 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属性。
这不是错误,此配置更改将解决您的问题。