Skip to content

Commit f3bb311

Browse files
rekbyblinkov
andauthored
add read in transaction in russian (#8825)
Co-authored-by: Ivan Blinkov <ivan@ydb.tech>
1 parent a6cd079 commit f3bb311

File tree

2 files changed

+79
-0
lines changed

2 files changed

+79
-0
lines changed

ydb/docs/en/core/reference/ydb-sdk/topic.md

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -849,6 +849,23 @@ All the metadata provided when writing a message is sent to a consumer with the
849849

850850
{% list tabs %}
851851

852+
- Go
853+
854+
To write to a topic within a transaction, create a transactional writer by calling [TopicClient.StartTransactionalWriter](https://pkg.go.dev/github.com/ydb-platform/ydb-go-sdk/v3/topic#Client.StartTransactionalWriter) with the `tx` argument. Once created, you can send messages as usual. There's no need to close the transactional writer manually, as it will be closed automatically when the transaction ends.
855+
856+
[Example on GitHub](https://github.com/ydb-platform/ydb-go-sdk/blob/master/examples/topic/topicwriter/topic_writer_transaction.go)
857+
858+
```go
859+
err := db.Query().DoTx(ctx, func(ctx context.Context, tx query.TxActor) error {
860+
writer, err := db.Topic().StartTransactionalWriter(tx, topicName)
861+
if err != nil {
862+
return err
863+
}
864+
865+
return writer.Write(ctx, topicwriter.Message{Data: strings.NewReader("asd")})
866+
})
867+
```
868+
852869
- Java (sync)
853870

854871
[Example on GitHub](https://github.com/ydb-platform/ydb-java-examples/blob/develop/ydb-cookbook/src/main/java/tech/ydb/examples/topic/transactions/TransactionWriteSync.java)
@@ -1656,6 +1673,29 @@ Reading progress is usually saved on a server for each Consumer. However, such p
16561673
}
16571674
```
16581675

1676+
- Go
1677+
1678+
To read messages from a topic within a transaction, use the [Reader.PopMessagesBatchTx](https://pkg.go.dev/github.com/ydb-platform/ydb-go-sdk/v3/topic/topicreader#Reader.PopMessagesBatchTx) method. It reads a batch of messages and adds their commit to the transaction, so there's no need to commit them separately. The reader can be reused across different transactions. However, it's important to commit transactions in the same order as the messages are read from the reader, as message commits in the topic must be performed strictly in order. The simplest way to ensure this is by using the reader within a loop.
1679+
1680+
1681+
[Example on GitHub](https://github.com/ydb-platform/ydb-go-sdk/blob/master/examples/topic/topicreader/topic_reader_transaction.go)
1682+
1683+
```go
1684+
for {
1685+
err := db.Query().DoTx(ctx, func(ctx context.Context, tx query.TxActor) error {
1686+
batch, err := reader.PopMessagesBatchTx(ctx, tx) // the batch will be committed along with the transaction
1687+
if err != nil {
1688+
return err
1689+
}
1690+
1691+
return processBatch(ctx, batch)
1692+
})
1693+
if err != nil {
1694+
handleError(err)
1695+
}
1696+
}
1697+
```
1698+
16591699
- Java (sync)
16601700

16611701
[Example on GitHub](https://github.com/ydb-platform/ydb-java-examples/blob/develop/ydb-cookbook/src/main/java/tech/ydb/examples/topic/transactions/TransactionReadSync.java)

ydb/docs/ru/core/reference/ydb-sdk/topic.md

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -859,6 +859,23 @@
859859
transaction.Commit().GetValueSync();
860860
```
861861
862+
- Go
863+
864+
Для записи в топик в транзакции необходимо создать транзакционного писателя через вызов [TopicClient.StartTransactionalWriter](https://pkg.go.dev/github.com/ydb-platform/ydb-go-sdk/v3/topic#Client.StartTransactionalWriter). После этого можно отправлять сообщения, как обычно. Закрывать транзакционного писателя не требуется — это происходит автоматически при завершении транзакции.
865+
866+
[Пример на GitHub](https://github.com/ydb-platform/ydb-go-sdk/blob/master/examples/topic/topicwriter/topic_writer_transaction.go)
867+
868+
```go
869+
err := db.Query().DoTx(ctx, func(ctx context.Context, tx query.TxActor) error {
870+
writer, err := db.Topic().StartTransactionalWriter(tx, topicName)
871+
if err != nil {
872+
return err
873+
}
874+
875+
return writer.Write(ctx, topicwriter.Message{Data: strings.NewReader("asd")})
876+
})
877+
```
878+
862879
- Java (sync)
863880
864881
[Пример на GitHub](https://github.com/ydb-platform/ydb-java-examples/blob/develop/ydb-cookbook/src/main/java/tech/ydb/examples/topic/transactions/TransactionWriteSync.java)
@@ -1670,6 +1687,28 @@
16701687
}
16711688
```
16721689
1690+
- Go
1691+
1692+
Для чтения сообщений в рамках транзакции следует использовать метод [`Reader.PopMessagesBatchTx`](https://pkg.go.dev/github.com/ydb-platform/ydb-go-sdk/v3/topic/topicreader#Reader.PopMessagesBatchTx). Он прочитает пакет сообщений и добавит их коммит в транзакцию, при этом отдельно коммитить эти сообщения не требуется. Читателя сообщений можно использовать повторно в разных транзакциях. При этом важно, чтобы порядок коммита транзакций соответствовал порядку получения сообщений от читателя, так как коммиты сообщений в топике должны выполняться строго по порядку. Проще всего это сделать если использовать читателя в цикле.
1693+
1694+
[Пример на GitHub](https://github.com/ydb-platform/ydb-go-sdk/blob/master/examples/topic/topicreader/topic_reader_transaction.go)
1695+
1696+
```go
1697+
for {
1698+
err := db.Query().DoTx(ctx, func(ctx context.Context, tx query.TxActor) error {
1699+
batch, err := reader.PopMessagesBatchTx(ctx, tx) // батч закоммитится при общем коммите транзакции
1700+
if err != nil {
1701+
return err
1702+
}
1703+
1704+
return processBatch(ctx, batch)
1705+
})
1706+
if err != nil {
1707+
handleError(err)
1708+
}
1709+
}
1710+
```
1711+
16731712
- Java (sync)
16741713
16751714
[Пример на GitHub](https://github.com/ydb-platform/ydb-java-examples/blob/develop/ydb-cookbook/src/main/java/tech/ydb/examples/topic/transactions/TransactionReadSync.java)

0 commit comments

Comments
 (0)