[英]Chronicle-queue replication error: Received a handler for host ID: 1, my host ID is: 2 this is probably a configuration error
我目前正在使用以下文档测试和学习编年史队列企业复制:
但是,我收到以下错误:
java.lang.IllegalArgumentException :收到主机 ID 的处理程序:1,我的主机 ID 是:2 这可能是配置错误。
我的复制配置如下,我缺少什么? 下面是我的复制配置。
!ChronicleQueueReplicationCfg {
eventId: "",
serviceId: "",
replicaSets: {
global: !!set [
host1,
host2
]
},
allowSinkToSource: false,
context: {
networkContextFactory: !software.chronicle.enterprise.queue.replication.QueueClusterNetworkContext$Factory INSTANCE,
heartbeatTimeoutMs: 500000,
heartbeatIntervalMs: 300000,
pauserSupplier: !PauserMode busy,
replicationPauserSupplier: !!null "",
affinityCPU: !!null "",
wireType: BINARY_LIGHT,
localIdentifier: 1,
localName: host1,
serverThreadingStrategy: SINGLE_THREADED,
retryInterval: 1000,
procPrefix: !!null "",
baseSourcePath: source,
baseSinkPath: replica,
backfillTimeoutListener: !software.chronicle.enterprise.queue.replication.NoopBackfillListener INSTANCE,
tcpBias: !!null ""
},
hosts: {
host1: { hostId: 1, tcpBufferSize: 0, connectUri: "localhost:5001" },
host2: { hostId: 2, tcpBufferSize: 0, connectUri: "localhost:5002" }
},
queues: {
queue1: {
name: queue1,
path: queue1,
replicaSets: [
global
],
masterId: 1,
waitForSinks: 0
}
}
}
编年史队列企业所有 2.23ea26
我将其发布为答案,因为我需要共享一些配置。
您的配置似乎正确,但是,使用它的代码可能存在问题。 在chronicle-queue-enterprise
中有许多测试展示了如何使用复制功能。
您可以应用配置的最简单的方法称为ReplicationTest.shouldReplicate
。 该测试只是将两条消息写入source
并验证它是否可以从接收sink
读取相同的消息(这意味着复制工作)。
我在此测试中应用了您的配置,并进行了细微更改。
!ChronicleQueueReplicationCfg {
eventId: "",
serviceId: "",
replicaSets: {
global: !!set [
host1,
host2
]
},
allowSinkToSource: false,
context: {
networkContextFactory: !software.chronicle.enterprise.queue.replication.QueueClusterNetworkContext$Factory INSTANCE,
heartbeatTimeoutMs: 500000,
heartbeatIntervalMs: 300000,
pauserSupplier: !PauserMode busy,
replicationPauserSupplier: !!null "",
affinityCPU: !!null "",
wireType: BINARY_LIGHT,
localIdentifier: 1,
localName: host1,
serverThreadingStrategy: SINGLE_THREADED,
retryInterval: 1000,
procPrefix: !!null "",
baseSourcePath: "replica/source",
baseSinkPath: "replica/sink$hostId",
backfillTimeoutListener: !software.chronicle.enterprise.queue.replication.NoopBackfillListener INSTANCE,
tcpBias: !!null ""
},
hosts: {
host1: { hostId: 1, tcpBufferSize: 0, connectUri: host.port1 },
host2: { hostId: 2, tcpBufferSize: 0, connectUri: host.port2 }
},
queues: {
queue1: {
name: queue1,
path: queue1,
acknowledge: true,
allowUnknownSinks: true,
replicaSets: [
global
],
masterId: 1,
waitForSinks: 0
}
}
}
我无法复制您遇到的相同IllegalArgumentException
,请分享使用您的配置的代码,我相信我们会找出问题所在并更新此答案。
我将根据给出的反馈回答我自己的问题。 该问题是由于我在创建 ReplicatedQueue 对象时将相同的 ChronicleQueueReplicationCfg 实例传递到复制的每一侧引起的。 我错过了 ChronicleQueueReplicationCfg 对象在复制启动时是有状态的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.