Apache Curator library для ZooKeeper использует хороший «плавный» синтаксис. Например, чтобы изменить несколько узлов в транзакции, код выглядит примерно так:Куратор транзакции времени исполнения
client.inTransaction().
.setData().forNode(node1Path, data1)
.and()
.SetData().forNode(node2Path, data2)
.and()
.commit();
Это прекрасно работает и, ИМХО, производит очень читаемый код. Однако у меня есть ситуация, когда мне приходится изменять набор ZNodes в транзакции. Я не знаю до тех пор, пока не будет изменено количество узлов или узлов. Таким образом, я не думаю, что могу свободно использовать свободный синтаксис. Глядя на документы, я могу вручную управлять прокси-объектами, каждый из которых быстро возвращается на вызов метода, но тогда код требует явного использования CuratorTransaction
, TransactionSetDataBuilder
, CuratorTransactionBridge
и т. Д. Это явно работает, но код начинает выглядеть действительно уродливым ,
Я не вижу неходового способа совершать транзакции с Куратором. Кто-нибудь знает, есть ли он и/или есть ли «хороший» способ построить транзакцию во время выполнения? В частности, при сопоставлении Map<String, String>
с пути ZNode к данным, которые должны быть в конечном итоге в этом ZNode, как бы вы установили все узлы на транзакции?
Очень красивый! Я не понял, что CuratorTransactionFinal является подклассом CuratorTransaction. –
Это работает, но API-интерфейс куратора (ПРИМЕЧАНИЕ: Я главный автор) нуждается в улучшении. Мы будем благодарны за любые вклады (или, по крайней мере, открытый билет) здесь: https://issues.apache.org/jira/browse/CURATOR – Randgalt