WSO2 ESB入站JMS端点群集问题

WSO2 ESB入站JMS端点群集问题,wso2,jms,activemq,wso2esb,Wso2,Jms,Activemq,Wso2esb,我在WSO2 ESB入站端点方面遇到一些问题。就我所见,这片土地 <parameter name="coordination">true</parameter> true 强制在群集的一个工作节点中执行入站端点。如果所选节点已关闭,则另一个工作节点将启动入站端点 我有一个包含两个工作节点和一个管理节点的集群。集群按照AWS模式进行配置,工作正常。 我也有一个JMS入站端点,以这种方式配置 <inboundEndpoint name="INB_Q1" onErro

我在WSO2 ESB入站端点方面遇到一些问题。就我所见,这片土地

<parameter name="coordination">true</parameter>
true
强制在群集的一个工作节点中执行入站端点。如果所选节点已关闭,则另一个工作节点将启动入站端点

我有一个包含两个工作节点和一个管理节点的集群。集群按照AWS模式进行配置,工作正常。 我也有一个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>

100
真的
真的
INB_Q1
3.
队列连接工厂
org.apache.activemq.jndi.ActiveMQInitialContextFactory
@activemq_故障转移
自动应答
假的
队列
应用程序/json
假的

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

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

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

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


谢谢。

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

<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>

实例ID
股份登记
真的
真的
/
regadmin@jdbc:mysql://carbondb.mysql-wso2.com:3306/REGISTRY_DB?autoReconnect=true
这方面应该有轻微的变化。由于在两个工作节点中添加了相同的配置,它们都试图在数据库中写入注册表配置。因此,任务配置将被重新设置,并将在重新启动一个节点后启动新流程

因此,请在一个节点中更改以下内容:

<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>

实例ID
股份登记
假的
真的
/
regadmin@jdbc:mysql://carbondb.mysql-wso2.com:3306/REGISTRY_DB?autoReconnect=true
我们所做的改变如下:

 <readOnly>false</readOnly>
false
当您有多个工作节点时,应该在除一个之外的其他节点中禁用readOnly属性


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

这不起作用。我的配置看起来像这个管理器节点:false Worker Node 1:true Worker Node 2:false,但是当一个节点关闭然后再次启动时,我遇到了相同的问题。实际上,关于共享注册表的文档说remoteInstance部分引用了外部注册表装载。我们可以指定此实例的只读/读写性质以及缓存配置和注册表根位置。对于工作节点,readOnly属性应为true;对于manager节点,此属性应设置为false。