diff --git a/ydb/docs/ru/core/_includes/feature-not-supported.md b/ydb/docs/ru/core/_includes/feature-not-supported.md new file mode 100644 index 000000000000..cc69b77a1412 --- /dev/null +++ b/ydb/docs/ru/core/_includes/feature-not-supported.md @@ -0,0 +1 @@ +Функциональность на данный момент не поддерживается. diff --git a/ydb/docs/ru/core/_includes/work-in-progress.md b/ydb/docs/ru/core/_includes/work-in-progress.md deleted file mode 100644 index 5b8bd574e881..000000000000 --- a/ydb/docs/ru/core/_includes/work-in-progress.md +++ /dev/null @@ -1 +0,0 @@ -Данный раздел находится в разработке. diff --git a/ydb/docs/ru/core/recipes/ydb-sdk/auth-access-token.md b/ydb/docs/ru/core/recipes/ydb-sdk/auth-access-token.md index dccde1326650..d062f7011ef7 100644 --- a/ydb/docs/ru/core/recipes/ydb-sdk/auth-access-token.md +++ b/ydb/docs/ru/core/recipes/ydb-sdk/auth-access-token.md @@ -199,6 +199,16 @@ await using var driver = await Driver.CreateInitialized(config); ``` +- Rust + + ```rust + use ydb::{AccessTokenCredentials, ClientBuilder, YdbResult}; + + let client = ClientBuilder::new_from_connection_string("grpc://localhost:2136?database=local")? + .with_credentials(AccessTokenCredentials::from(std::env::var("YDB_TOKEN")?)) + .client()?; + ``` + - PHP ```php diff --git a/ydb/docs/ru/core/recipes/ydb-sdk/auth-anonymous.md b/ydb/docs/ru/core/recipes/ydb-sdk/auth-anonymous.md index fddf6c0c283e..4b7d565f9277 100644 --- a/ydb/docs/ru/core/recipes/ydb-sdk/auth-anonymous.md +++ b/ydb/docs/ru/core/recipes/ydb-sdk/auth-anonymous.md @@ -159,6 +159,16 @@ await using var driver = await Driver.CreateInitialized(config); ``` +- Rust + + ```rust + use ydb::{AnonymousCredentials, ClientBuilder, YdbResult}; + + let client = ClientBuilder::new_from_connection_string("grpc://localhost:2136?database=local")? + .with_credentials(AnonymousCredentials::new()) + .client()?; + ``` + - PHP ```php diff --git a/ydb/docs/ru/core/recipes/ydb-sdk/auth-env.md b/ydb/docs/ru/core/recipes/ydb-sdk/auth-env.md index 8e1c1a1de0a5..d2de5cd34dc0 100644 --- a/ydb/docs/ru/core/recipes/ydb-sdk/auth-env.md +++ b/ydb/docs/ru/core/recipes/ydb-sdk/auth-env.md @@ -168,6 +168,16 @@ {% endlist %} +- Rust + + ```rust + use ydb::{ClientBuilder, FromEnvCredentials, YdbResult}; + + let client = ClientBuilder::new_from_connection_string(std::env::var("YDB_CONNECTION_STRING")?)? + .with_credentials(FromEnvCredentials::new()?) + .client()?; + ``` + - PHP ```php diff --git a/ydb/docs/ru/core/recipes/ydb-sdk/auth-metadata.md b/ydb/docs/ru/core/recipes/ydb-sdk/auth-metadata.md index 520795580ecb..61754d043f04 100644 --- a/ydb/docs/ru/core/recipes/ydb-sdk/auth-metadata.md +++ b/ydb/docs/ru/core/recipes/ydb-sdk/auth-metadata.md @@ -172,6 +172,16 @@ await using var driver = await Driver.CreateInitialized(config); ``` +- Rust + + ```rust + use ydb::{ClientBuilder, MetadataUrlCredentials, YdbResult}; + + let client = ClientBuilder::new_from_connection_string("grpc://localhost:2136?database=local")? + .with_credentials(MetadataUrlCredentials::new()) + .client()?; + ``` + - PHP ```php diff --git a/ydb/docs/ru/core/recipes/ydb-sdk/auth-service-account.md b/ydb/docs/ru/core/recipes/ydb-sdk/auth-service-account.md index 47358ef14d19..58349056dd66 100644 --- a/ydb/docs/ru/core/recipes/ydb-sdk/auth-service-account.md +++ b/ydb/docs/ru/core/recipes/ydb-sdk/auth-service-account.md @@ -188,6 +188,16 @@ await using var driver = await Driver.CreateInitialized(config); ``` +- Rust + + ```rust + use ydb::{ClientBuilder, ServiceAccountCredentials, YdbResult}; + + let client = ClientBuilder::new_from_connection_string(std::env::var("YDB_CONNECTION_STRING")?)? + .with_credentials(ServiceAccountCredentials::from_env()?) + .client()?; + ``` + - PHP ```php diff --git a/ydb/docs/ru/core/recipes/ydb-sdk/auth-static.md b/ydb/docs/ru/core/recipes/ydb-sdk/auth-static.md index f03db4761db2..48cae86e7ebd 100644 --- a/ydb/docs/ru/core/recipes/ydb-sdk/auth-static.md +++ b/ydb/docs/ru/core/recipes/ydb-sdk/auth-static.md @@ -145,6 +145,21 @@ await using var driver = await Driver.CreateInitialized(config); ``` +- Rust + + ```rust + use ydb::{ClientBuilder, StaticCredentials, YdbResult}; + + let client = ClientBuilder::new_from_connection_string("grpc://localhost:2136?database=local")? + .with_credentials(StaticCredentials::new( + std::env::var("YDB_USER")?, + std::env::var("YDB_PASSWORD")?, + http::Uri::from_static("grpc://localhost:2136"), + "local".into(), + )) + .client()?; + ``` + - PHP ```php diff --git a/ydb/docs/ru/core/recipes/ydb-sdk/balancing-prefer-local.md b/ydb/docs/ru/core/recipes/ydb-sdk/balancing-prefer-local.md index 0e0c05c593f0..d6d867496a01 100644 --- a/ydb/docs/ru/core/recipes/ydb-sdk/balancing-prefer-local.md +++ b/ydb/docs/ru/core/recipes/ydb-sdk/balancing-prefer-local.md @@ -170,7 +170,7 @@ - JavaScript - {% include [work-in-progress](../../_includes/work-in-progress.md) %} + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} - Java @@ -197,4 +197,12 @@ {% endlist %} +- Rust + + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} + +- PHP + + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} + {% endlist %} diff --git a/ydb/docs/ru/core/recipes/ydb-sdk/balancing-prefer-location.md b/ydb/docs/ru/core/recipes/ydb-sdk/balancing-prefer-location.md index ef0dcb44e1e3..61296cdc539f 100644 --- a/ydb/docs/ru/core/recipes/ydb-sdk/balancing-prefer-location.md +++ b/ydb/docs/ru/core/recipes/ydb-sdk/balancing-prefer-location.md @@ -113,11 +113,11 @@ - Python - Функциональность на данный момент не поддерживается. + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} - JavaScript - {% include [work-in-progress](../../_includes/work-in-progress.md) %} + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} - Java @@ -146,4 +146,12 @@ {% endlist %} +- Rust + + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} + +- PHP + + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} + {% endlist %} diff --git a/ydb/docs/ru/core/recipes/ydb-sdk/balancing-prefer-pile.md b/ydb/docs/ru/core/recipes/ydb-sdk/balancing-prefer-pile.md index 72c6dc9697ce..c81183089ff1 100644 --- a/ydb/docs/ru/core/recipes/ydb-sdk/balancing-prefer-pile.md +++ b/ydb/docs/ru/core/recipes/ydb-sdk/balancing-prefer-pile.md @@ -10,7 +10,7 @@ - Go - Функциональность на данный момент не поддерживается. + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} - С++ @@ -32,14 +32,22 @@ - Python - Функциональность на данный момент не поддерживается. + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} - JavaScript - {% include [work-in-progress](../../_includes/work-in-progress.md) %} + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} - Java - Функциональность на данный момент не поддерживается. + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} + +- Rust + + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} + +- PHP + + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} {% endlist %} diff --git a/ydb/docs/ru/core/recipes/ydb-sdk/balancing-random-choice.md b/ydb/docs/ru/core/recipes/ydb-sdk/balancing-random-choice.md index 0d920df7b55d..849c3db20764 100644 --- a/ydb/docs/ru/core/recipes/ydb-sdk/balancing-random-choice.md +++ b/ydb/docs/ru/core/recipes/ydb-sdk/balancing-random-choice.md @@ -166,7 +166,7 @@ - JavaScript - {% include [work-in-progress](../../_includes/work-in-progress.md) %} + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} - Java @@ -195,4 +195,12 @@ {% endlist %} +- Rust + + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} + +- PHP + + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} + {% endlist %} diff --git a/ydb/docs/ru/core/recipes/ydb-sdk/bulk-upsert.md b/ydb/docs/ru/core/recipes/ydb-sdk/bulk-upsert.md index e1f172cd6ff7..5591dcfc5e8e 100644 --- a/ydb/docs/ru/core/recipes/ydb-sdk/bulk-upsert.md +++ b/ydb/docs/ru/core/recipes/ydb-sdk/bulk-upsert.md @@ -241,14 +241,14 @@ ```java private static final String TABLE_NAME = "bulk_upsert"; private static final int BATCH_SIZE = 1000; - + public static void main(String[] args) { String connectionString = args[0]; - + try (GrpcTransport transport = GrpcTransport.forConnectionString(connectionString) .withAuthProvider(NopAuthProvider.INSTANCE) // анонимная аутентификация .build()) { - + // Для bulk upsert необходимо использовать полный путь к таблице String tablePath = transport.getDatabase() + "/" + TABLE_NAME; try (TableClient tableClient = TableClient.newClient(transport).build()) { @@ -257,7 +257,7 @@ } } } - + public static void execute(SessionRetryContext retryCtx, String tablePath) { // описание таблицы StructType structType = StructType.of( @@ -267,7 +267,7 @@ "http_code", PrimitiveType.Uint32, "message", PrimitiveType.Text ); - + // генерация пакета записей List> list = new ArrayList<>(50); for (int i = 0; i < BATCH_SIZE; i += 1) { @@ -280,7 +280,7 @@ "message", PrimitiveValue.newText(i % 3 == 0 ? "GET / HTTP/1.1" : "GET /images/logo.png HTTP/1.1") )); } - + // Create list of structs ListValue rows = ListType.of(structType).newValue(list); // Do retry operation on errors with best effort @@ -294,10 +294,10 @@ ```java private static final int BATCH_SIZE = 1000; - + public static void main(String[] args) { String connectionUrl = args[0]; - + try (Connection conn = DriverManager.getConnection(connectionUrl)) { try (PreparedStatement ps = conn.prepareStatement( "BULK UPSERT INTO bulk_upsert (app, timestamp, host, http_code, message) VALUES (?, ?, ?, ?, ?);" @@ -310,7 +310,7 @@ ps.setString(5, i % 3 == 0 ? "GET / HTTP/1.1" : "GET /images/logo.png HTTP/1.1"); ps.addBatch(); } - + ps.executeBatch(); } } catch (SQLException e) { @@ -411,6 +411,66 @@ - JavaScript - {% include [work-in-progress](../../_includes/work-in-progress.md) %} + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} + +- Rust + + ```rust + use ydb::{ydb_struct, AccessTokenCredentials, ClientBuilder, Value, YdbResult}; + + #[tokio::main] + async fn main() -> YdbResult<()> { + let client = ClientBuilder::new_from_connection_string( + "grpc://localhost:2136?database=local", + )? + .with_credentials(AccessTokenCredentials::from("...")) + .client()?; + + client.wait().await?; + + let rows: Vec = vec![ + ydb_struct!( + "id" => 1_u64, + "val" => Value::Text("1".into()), + ), + ydb_struct!( + "id" => 2_u64, + "val" => Value::Text("2".into()), + ), + ydb_struct!( + "id" => 3_u64, + "val" => Value::Text("3".into()), + ), + ]; + + client + .table_client() + .retry_execute_bulk_upsert("/local/tablename".into(), rows) + .await?; + + Ok(()) + } + ``` + +- PHP + + ```php + 1, 'val' => '1'], + ['id' => 2, 'val' => '2'], + ['id' => 3, 'val' => '3'], + ]; + + $ydb->table()->bulkUpsert('tablename', $rows, [ + 'id' => 'UINT64', + 'val' => 'UTF8', + ]); + ``` {% endlist %} diff --git a/ydb/docs/ru/core/recipes/ydb-sdk/debug-jaeger.md b/ydb/docs/ru/core/recipes/ydb-sdk/debug-jaeger.md index 461a9daa2b42..0ecceb2ec494 100644 --- a/ydb/docs/ru/core/recipes/ydb-sdk/debug-jaeger.md +++ b/ydb/docs/ru/core/recipes/ydb-sdk/debug-jaeger.md @@ -141,14 +141,22 @@ - Java - Функциональность на данный момент не поддерживается. + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} - Python - Функциональность на данный момент не поддерживается. + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} - JavaScript - {% include [work-in-progress](../../_includes/work-in-progress.md) %} + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} + +- Rust + + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} + +- PHP + + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} {% endlist %} diff --git a/ydb/docs/ru/core/recipes/ydb-sdk/debug-logs.md b/ydb/docs/ru/core/recipes/ydb-sdk/debug-logs.md index 21d878ae09f0..8e805ed0b9de 100644 --- a/ydb/docs/ru/core/recipes/ydb-sdk/debug-logs.md +++ b/ydb/docs/ru/core/recipes/ydb-sdk/debug-logs.md @@ -375,6 +375,34 @@ {% endlist %} +- Python + + Python SDK использует стандартную библиотеку для логирования - `logging`. Для включения определенного режима логирования: + + ```python + import logging + + logging.getLogger('ydb').setLevel(logging.DEBUG) + ``` + +- JavaScript + + Для логирования событий внутри sdk используется библиотека [debug](https://www.npmjs.com/package/debug). + Для включения логов необходимо задать переменную окружения `DEBUG` со значением фильтра по событиям sdk - `DEBUG=ydbjs:*`. + +- Rust + + Внутри крейта `ydb` сообщения идут через стандартную для Rust экосистемы библиотеку [`tracing`](https://docs.rs/tracing) (это имя крейта; сюда же относятся обычные текстовые логи уровня debug/trace, не только «распределённая трассировка»). Чтобы видеть вывод в консоль, до создания клиента подключите подписчика, например [`tracing_subscriber::fmt`](https://docs.rs/tracing-subscriber) с нужным уровнем (`TRACE` для максимальной детализации). Пример: [`basic-logs.rs`](https://github.com/ydb-platform/ydb-rs-sdk/blob/master/ydb/examples/basic-logs.rs). + + ```rust + tracing_subscriber::fmt() + .with_max_level(tracing::Level::TRACE) + .init(); + + let client = ydb::ClientBuilder::new_from_connection_string("grpc://localhost:2136?database=local")? + .client()?; + ``` + - PHP В YDB PHP SDK для логирования вам нужно использовать класс, который реализует `\Psr\Log\LoggerInterface`. @@ -392,19 +420,4 @@ $ydb = new \YdbPlatform\Ydb\Ydb($config); ``` -- Python - - Python SDK использует стандартную библиотеку для логирования - `logging`. Для включения определенного режима логирования: - - ```python - import logging - - logging.getLogger('ydb').setLevel(logging.DEBUG) - ``` - -- JavaScript - - Для логирования событий внутри sdk используется библиотека [debug](https://www.npmjs.com/package/debug). - Для включения логов необходимо задать переменную окружения `DEBUG` со значением фильтра по событиям sdk - `DEBUG=ydbjs:*`. - {% endlist %} diff --git a/ydb/docs/ru/core/recipes/ydb-sdk/debug-otel.md b/ydb/docs/ru/core/recipes/ydb-sdk/debug-otel.md index fe44174bebc9..751820bf14ca 100644 --- a/ydb/docs/ru/core/recipes/ydb-sdk/debug-otel.md +++ b/ydb/docs/ru/core/recipes/ydb-sdk/debug-otel.md @@ -124,14 +124,22 @@ - Java - Функциональность на данный момент не поддерживается. + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} - Python - Функциональность на данный момент не поддерживается. + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} - JavaScript - {% include [work-in-progress](../../_includes/work-in-progress.md) %} + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} + +- Rust + + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} + +- PHP + + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} {% endlist %} diff --git a/ydb/docs/ru/core/recipes/ydb-sdk/debug-prometheus.md b/ydb/docs/ru/core/recipes/ydb-sdk/debug-prometheus.md index 9e9df36d9e28..9cc85f02782c 100644 --- a/ydb/docs/ru/core/recipes/ydb-sdk/debug-prometheus.md +++ b/ydb/docs/ru/core/recipes/ydb-sdk/debug-prometheus.md @@ -87,14 +87,22 @@ - Java - Функциональность на данный момент не поддерживается. + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} - Python - Функциональность на данный момент не поддерживается. + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} - JavaScript - {% include [work-in-progress](../../_includes/work-in-progress.md) %} + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} + +- Rust + + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} + +- PHP + + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} {% endlist %} diff --git a/ydb/docs/ru/core/recipes/ydb-sdk/distributed-lock.md b/ydb/docs/ru/core/recipes/ydb-sdk/distributed-lock.md index c0074ffb189e..78ef2f3015f2 100644 --- a/ydb/docs/ru/core/recipes/ydb-sdk/distributed-lock.md +++ b/ydb/docs/ru/core/recipes/ydb-sdk/distributed-lock.md @@ -125,4 +125,41 @@ } ``` +- Rust + + ```rust + use ydb::{ClientBuilder, NodeConfigBuilder, SessionOptionsBuilder, YdbResult}; + + #[tokio::main] + async fn main() -> YdbResult<()> { + let client = ClientBuilder::new_from_connection_string("grpc://localhost:2136?database=local")? + .client()?; + client.wait().await?; + + let mut coordination_client = client.coordination_client(); + coordination_client + .create_node( + "/local/my_lock_node".into(), + NodeConfigBuilder::default().build()?, + ) + .await?; + + let session = coordination_client + .create_session( + "/local/my_lock_node".into(), + SessionOptionsBuilder::default().build()?, + ) + .await?; + + session.create_semaphore("resource", 1, vec![]).await?; + let _lease = session.acquire_semaphore("resource".into(), 1).await?; + // критическая секция + Ok(()) + } + ``` + +- PHP + + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} + {% endlist %} diff --git a/ydb/docs/ru/core/recipes/ydb-sdk/init.md b/ydb/docs/ru/core/recipes/ydb-sdk/init.md index 977a953e4cce..8794d6dadecb 100644 --- a/ydb/docs/ru/core/recipes/ydb-sdk/init.md +++ b/ydb/docs/ru/core/recipes/ydb-sdk/init.md @@ -191,6 +191,21 @@ await driver.ready() ``` +- Rust + + ```rust + use ydb::{AccessTokenCredentials, ClientBuilder, YdbResult}; + + #[tokio::main] + async fn main() -> YdbResult<()> { + let client = ClientBuilder::new_from_connection_string("grpc://localhost:2136?database=local")? + .with_credentials(AccessTokenCredentials::from("...")) + .client()?; + client.wait().await?; + Ok(()) + } + ``` + - PHP ```php @@ -219,12 +234,4 @@ $ydb = new Ydb($config); ``` -- Rust - - ```rust - let client = ClientBuilder::new_from_connection_string("grpc://localhost:2136?database=local")? - .with_credentials(AccessTokenCredentials::from("...")) - .client()? - ``` - {% endlist %} diff --git a/ydb/docs/ru/core/recipes/ydb-sdk/retry.md b/ydb/docs/ru/core/recipes/ydb-sdk/retry.md index e0bbd36e625e..41f3951148fe 100644 --- a/ydb/docs/ru/core/recipes/ydb-sdk/retry.md +++ b/ydb/docs/ru/core/recipes/ydb-sdk/retry.md @@ -671,4 +671,64 @@ }) ``` +- Rust + + Повторные попытки для запросов к Table API выполняет `TableClient::retry_transaction`: callback получает транзакцию, внутри вызываются `query` и при необходимости `commit`. + + ```rust + use ydb::{AccessTokenCredentials, ClientBuilder, Query, YdbResult}; + + #[tokio::main] + async fn main() -> YdbResult<()> { + let client = ClientBuilder::new_from_connection_string( + "grpc://localhost:2136?database=local", + )? + .with_credentials(AccessTokenCredentials::from("...")) + .client()?; + + client.wait().await?; + + let row = client + .table_client() + .retry_transaction(|mut tx| async move { + let res = tx + .query(Query::new( + "SELECT series_id, title FROM series WHERE series_id = 1", + )) + .await?; + Ok(res.into_only_row()?.remove_field_by_name("title")?) + }) + .await?; + + let _title: String = row.try_into()?; + Ok(()) + } + ``` + +- PHP + + В {{ ydb-short-name }} PHP SDK повторные попытки для запросов к Table API задаются через `Table::retryTransaction()` (транзакция + коммит + ретраи при поддерживаемых ошибках) или `Table::retrySession()` (одна сессия без обёртки «транзакция целиком»). Второй аргумент `retryTransaction` — признак идемпотентности (`true` расширяет набор ошибок, при которых выполняется повтор). + + Пример с `retryTransaction`: + + ```php + table()->retryTransaction( + function (Session $session) { + return $session->query( + 'SELECT series_id, title FROM series WHERE series_id = 1;' + ); + }, + true + ); + + // $result->rows(), $result->rowCount(), ... + ``` + {% endlist %} diff --git a/ydb/docs/ru/core/recipes/ydb-sdk/session-pool-limit.md b/ydb/docs/ru/core/recipes/ydb-sdk/session-pool-limit.md index 805a2e770d5c..61148846aa60 100644 --- a/ydb/docs/ru/core/recipes/ydb-sdk/session-pool-limit.md +++ b/ydb/docs/ru/core/recipes/ydb-sdk/session-pool-limit.md @@ -148,6 +148,14 @@ - JavaScript - {% include [work-in-progress](../../_includes/work-in-progress.md) %} + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} + +- Rust + + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} + +- PHP + + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} {% endlist %} diff --git a/ydb/docs/ru/core/recipes/ydb-sdk/ttl.md b/ydb/docs/ru/core/recipes/ydb-sdk/ttl.md index 22a2283b82b1..cdfa24bb1a17 100644 --- a/ydb/docs/ru/core/recipes/ydb-sdk/ttl.md +++ b/ydb/docs/ru/core/recipes/ydb-sdk/ttl.md @@ -42,7 +42,7 @@ - JavaScript - {% include [work-in-progress](../../_includes/work-in-progress.md) %} + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} - Java @@ -93,7 +93,7 @@ - JavaScript - {% include [work-in-progress](../../_includes/work-in-progress.md) %} + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} - Java @@ -141,19 +141,19 @@ - JavaScript - {% include [work-in-progress](../../_includes/work-in-progress.md) %} + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} - Go - Функциональность на данный момент не поддерживается. + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} - Python - Функциональность на данный момент не поддерживается. + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} - Java - Функциональность на данный момент не поддерживается. + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} {% endlist %} @@ -208,7 +208,7 @@ - JavaScript - {% include [work-in-progress](../../_includes/work-in-progress.md) %} + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} - Java @@ -261,7 +261,7 @@ - JavaScript - {% include [work-in-progress](../../_includes/work-in-progress.md) %} + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} - Java @@ -310,7 +310,7 @@ - JavaScript - {% include [work-in-progress](../../_includes/work-in-progress.md) %} + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} - Java diff --git a/ydb/docs/ru/core/recipes/ydb-sdk/upsert.md b/ydb/docs/ru/core/recipes/ydb-sdk/upsert.md index ffaf63530cab..372c958bf38d 100644 --- a/ydb/docs/ru/core/recipes/ydb-sdk/upsert.md +++ b/ydb/docs/ru/core/recipes/ydb-sdk/upsert.md @@ -357,4 +357,163 @@ ``` +- Rust + + ```rust + use ydb::{ + ydb_params, ydb_struct, AccessTokenCredentials, ClientBuilder, Query, Value, YdbResult, + }; + + fn series_row( + series_id: u64, + title: &str, + series_info: &str, + comment: Option<&str>, + ) -> YdbResult { + let comment_val = match comment { + None => Value::optional_from(Value::Text(String::new()), None)?, + Some(s) => Value::optional_from( + Value::Text(String::new()), + Some(Value::Text(s.into())), + )?, + }; + Ok(ydb_struct!( + "series_id" => series_id, + "title" => title, + "series_info" => series_info, + "comment" => comment_val, + )) + } + + #[tokio::main] + async fn main() -> YdbResult<()> { + let client = ClientBuilder::new_from_connection_string( + "grpc://localhost:2136?database=local", + )? + .with_credentials(AccessTokenCredentials::from("...")) + .client()?; + + client.wait().await?; + + let example = series_row(0, "", "", None)?; + let series_data = Value::list_from( + example, + vec![ + series_row( + 1, + "IT Crowd", + "The IT Crowd is a British sitcom...", + None, + )?, + series_row( + 2, + "Silicon Valley", + "Silicon Valley is an American comedy...", + Some("lorem ipsum"), + )?, + ], + )?; + + let query = Query::new( + r#" + PRAGMA TablePathPrefix("/local"); + DECLARE $seriesData AS List + >>; + + UPSERT INTO series + ( + series_id, + title, + series_info, + comment + ) + SELECT + series_id, + title, + series_info, + comment + FROM AS_TABLE($seriesData); + "#, + ) + .with_params(ydb_params!("$seriesData" => series_data)); + + client + .table_client() + .retry_transaction(|mut t| { + let query = query.clone(); + async move { + t.query(query).await?; + t.commit().await?; + Ok(()) + } + }) + .await?; + + Ok(()) + } + ``` + +- PHP + + ```php + + >>; + + UPSERT INTO series + ( + series_id, + title, + series_info, + comment + ) + SELECT + series_id, + title, + series_info, + comment + FROM AS_TABLE($seriesData); + EOS; + + $seriesData = [ + [ + 'series_id' => 1, + 'title' => 'IT Crowd', + 'series_info' => 'The IT Crowd is a British sitcom...', + 'comment' => null, + ], + [ + 'series_id' => 2, + 'title' => 'Silicon Valley', + 'series_info' => 'Silicon Valley is an American comedy...', + 'comment' => 'lorem ipsum', + ], + ]; + + $ydb->table()->retryTransaction( + function (Session $session) use ($yql, $seriesData) { + return $session->prepare($yql)->execute([ + 'seriesData' => $seriesData, + ]); + }, + true + ); + ``` + {% endlist %} diff --git a/ydb/docs/ru/core/recipes/ydb-sdk/vector-search.md b/ydb/docs/ru/core/recipes/ydb-sdk/vector-search.md index 1fc67a338933..7f8949a1c5f3 100644 --- a/ydb/docs/ru/core/recipes/ydb-sdk/vector-search.md +++ b/ydb/docs/ru/core/recipes/ydb-sdk/vector-search.md @@ -133,6 +133,14 @@ } ``` +- Rust + + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} + +- PHP + + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} + {% endlist %} @@ -274,6 +282,14 @@ } ``` +- Rust + + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} + +- PHP + + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} + {% endlist %} @@ -857,6 +873,14 @@ FROM AS_TABLE($items);` ``` +- Rust + + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} + +- PHP + + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} + {% endlist %} @@ -1123,7 +1147,7 @@ - JavaScript - {% include [work-in-progress](../../_includes/work-in-progress.md) %} + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} - Java @@ -1179,6 +1203,14 @@ // SessionRetryContext tableRetry = SessionRetryContext.create(TableClient.newClient(transport).build()).build(); ``` +- Rust + + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} + +- PHP + + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} + {% endlist %} ## Поиск по вектору {#search-by-vector} @@ -1774,6 +1806,14 @@ LIMIT ${unsafe(limit)}; ``` +- Rust + + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} + +- PHP + + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} + {% endlist %} ## Итоговый пример {#full-example} @@ -2057,7 +2097,7 @@ - JavaScript - {% include [work-in-progress](../../_includes/work-in-progress.md) %} + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} - Java @@ -2141,4 +2181,12 @@ Вывод совпадает с примером на Python. +- Rust + + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} + +- PHP + + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} + {% endlist %} diff --git a/ydb/docs/ru/core/reference/ydb-sdk/_includes/install.md b/ydb/docs/ru/core/reference/ydb-sdk/_includes/install.md index 10194564282f..dfa75af0cced 100644 --- a/ydb/docs/ru/core/reference/ydb-sdk/_includes/install.md +++ b/ydb/docs/ru/core/reference/ydb-sdk/_includes/install.md @@ -32,10 +32,6 @@ Добавьте зависимости в Maven-проект, как описано в пункте ["Install the SDK"](https://github.com/ydb-platform/ydb-java-sdk#install-the-sdk) файла `readme.md` в репозитории исходного кода. -- PHP - - {% include [install/cmd_php.md](install/cmd_php.md) %} - - JavaScript {% include [install/cmd_npm.md](install/cmd_npm.md) %} @@ -46,4 +42,8 @@ {% include [install/cmd_rust.md](install/cmd_rust.md) %} +- PHP + + {% include [install/cmd_php.md](install/cmd_php.md) %} + {% endlist %} diff --git a/ydb/docs/ru/core/reference/ydb-sdk/coordination.md b/ydb/docs/ru/core/reference/ydb-sdk/coordination.md index b8f6b87f5f1a..0dd55968d58c 100644 --- a/ydb/docs/ru/core/reference/ydb-sdk/coordination.md +++ b/ydb/docs/ru/core/reference/ydb-sdk/coordination.md @@ -106,6 +106,27 @@ await client.createNode("/path/to/mynode", {}); ``` +- Rust + + Клиент координации возвращается из [`Client::coordination_client`](https://docs.rs/ydb/latest/ydb/struct.Client.html#method.coordination_client). Узел создаётся через [`CoordinationClient::create_node`](https://docs.rs/ydb/latest/ydb/struct.CoordinationClient.html#method.create_node) с путём и [`NodeConfig`](https://docs.rs/ydb/latest/ydb/struct.NodeConfig.html) (через [`NodeConfigBuilder`](https://docs.rs/ydb/latest/ydb/struct.NodeConfigBuilder.html)). Также доступны [`alter_node`](https://docs.rs/ydb/latest/ydb/struct.CoordinationClient.html#method.alter_node), [`drop_node`](https://docs.rs/ydb/latest/ydb/struct.CoordinationClient.html#method.drop_node), [`describe_node`](https://docs.rs/ydb/latest/ydb/struct.CoordinationClient.html#method.describe_node). Полный пример — [`mutex.rs`](https://github.com/ydb-platform/ydb-rs-sdk/blob/master/ydb/examples/mutex.rs). + + ```rust + use ydb::NodeConfigBuilder; + + let mut coordination_client = client.coordination_client(); + + coordination_client + .create_node( + "/path/to/mynode".into(), + NodeConfigBuilder::default().build()?, + ) + .await?; + ``` + +- PHP + + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} + {% endlist %} ## Работа с сессиями {#session} @@ -200,6 +221,25 @@ await using session = await client.createSession("/path/to/mynode", {}, signal); ``` +- Rust + + Сессию создаёт [`CoordinationClient::create_session`](https://docs.rs/ydb/latest/ydb/struct.CoordinationClient.html#method.create_session) с путём к узлу и [`SessionOptions`](https://docs.rs/ydb/latest/ydb/struct.SessionOptions.html) ([`SessionOptionsBuilder`](https://docs.rs/ydb/latest/ydb/struct.SessionOptionsBuilder.html): таймаут, описание и т.д.). Поток с узлом поднимается внутри конструктора сессии; отдельного вызова `connect`, как в Java, нет. + + ```rust + use ydb::SessionOptionsBuilder; + + let session = coordination_client + .create_session( + "/path/to/mynode".into(), + SessionOptionsBuilder::default().build()?, + ) + .await?; + ``` + +- PHP + + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} + {% endlist %} ### Контроль завершения сессии {#session-control} @@ -230,6 +270,14 @@ Завершите сессию (`close()`), когда ваш сценарий отработал: так вы явно освободите соединение с узлом. Пока сессия не закрыта, SDK при сбоях сети сам повторяет подключение согласно `CoordinationSessionSettings`. Семафор держите только на время решения пользовательской задачи и отпускайте через `SemaphoreLease.release()`, когда ресурс больше не нужен. +- Rust + + У [`CoordinationSession`](https://docs.rs/ydb/latest/ydb/struct.CoordinationSession.html) вызовите [`alive`](https://docs.rs/ydb/latest/ydb/struct.CoordinationSession.html#method.alive): вернётся [`CancellationToken`](https://docs.rs/tokio-util/latest/tokio_util/sync/struct.CancellationToken.html) — при завершении сессии он отменяется (аналог отслеживания контекста в Go). При отпускании [`Lease`](https://docs.rs/ydb/latest/ydb/struct.Lease.html) или при `Drop` сессии освобождение семафора уходит на сервер в фоне. + +- PHP + + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} + {% endlist %} ## Работа с семафорами {#semaphore} @@ -323,6 +371,23 @@ .expectSuccess("create semaphore failed"); ``` +- Rust + + [`CoordinationSession::create_semaphore`](https://docs.rs/ydb/latest/ydb/struct.CoordinationSession.html#method.create_semaphore) принимает имя, лимит и произвольные байты `data`, хранимые у семафора. + + ```rust + session.create_semaphore("my-semaphore", 10, vec![]).await?; + + // или с пользовательскими данными, хранимыми у семафора: + session + .create_semaphore("other-semaphore", 10, b"my-data".to_vec()) + .await?; + ``` + +- PHP + + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} + {% endlist %} ### Захват семафора {#acquire-semaphore} @@ -444,6 +509,28 @@ В документации API указано: в один момент времени сессия может удерживать **только один** семафор; повторные вызовы для того же имени **заменяют** предыдущую операцию (например, чтобы уменьшить `count` или сменить таймаут). +- Rust + + [`acquire_semaphore`](https://docs.rs/ydb/latest/ydb/struct.CoordinationSession.html#method.acquire_semaphore) возвращает [`Lease`](https://docs.rs/ydb/latest/ydb/struct.Lease.html). Таймаут ожидания в очереди, эфемерность и данные операции задаются через [`AcquireOptionsBuilder`](https://docs.rs/ydb/latest/ydb/struct.AcquireOptionsBuilder.html) и [`acquire_semaphore_with_params`](https://docs.rs/ydb/latest/ydb/struct.CoordinationSession.html#method.acquire_semaphore_with_params). + + ```rust + use std::time::Duration; + use ydb::AcquireOptionsBuilder; + + let _lease = session.acquire_semaphore("my-semaphore", 5).await?; + + let opts = AcquireOptionsBuilder::default() + .timeout(Duration::from_secs(30)) + .build()?; + let _lease = session + .acquire_semaphore_with_params("my-semaphore", 5, opts) + .await?; + ``` + +- PHP + + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} + {% endlist %} Взятое значение захваченного семафора можно снизить (но не увеличить), вновь вызвав для него метод `AcquireSemaphore` с меньшим значением. @@ -520,6 +607,18 @@ .expectSuccess("update semaphore failed"); ``` +- Rust + + ```rust + session + .update_semaphore("my-semaphore", b"updated-data".to_vec()) + .await?; + ``` + +- PHP + + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} + {% endlist %} Этот вызов не требует захвата семафора и не приводит к нему. Если требуется, чтобы данные обновлял только один конкретный клиент, то это необходимо явным образом обеспечить, например, захватив семафор, обновив данные и отпустив семафор обратно. @@ -632,6 +731,18 @@ Для подписки на изменения используйте `watchSemaphore` с тем же режимом описания и [WatchSemaphoreMode](https://github.com/ydb-platform/ydb-java-sdk/blob/master/coordination/src/main/java/tech/ydb/coordination/settings/WatchSemaphoreMode.java) (данные, владельцы или оба). Объект [SemaphoreWatcher](https://github.com/ydb-platform/ydb-java-sdk/blob/master/coordination/src/main/java/tech/ydb/coordination/description/SemaphoreWatcher.java) содержит снимок `SemaphoreDescription` и `getChangedFuture()` — `CompletableFuture>` (см. [SemaphoreChangedEvent](https://github.com/ydb-platform/ydb-java-sdk/blob/master/coordination/src/main/java/tech/ydb/coordination/description/SemaphoreChangedEvent.java), поля `isDataChanged`, `isOwnersChanged`). Future завершится при следующем событии; после уведомления для продолжения наблюдения вызовите `watchSemaphore` снова (см. [тесты](https://github.com/ydb-platform/ydb-java-sdk/blob/master/coordination/src/test/java/tech/ydb/coordination/CoordinationServiceTest.java)). +- Rust + + [`describe_semaphore`](https://docs.rs/ydb/latest/ydb/struct.CoordinationSession.html#method.describe_semaphore) по умолчанию запрашивает владельцев и ожидающих. Набор флагов можно задать через [`DescribeOptions`](https://docs.rs/ydb/latest/ydb/struct.DescribeOptions.html) и [`describe_semaphore_with_params`](https://docs.rs/ydb/latest/ydb/struct.CoordinationSession.html#method.describe_semaphore_with_params). Для подписки на изменения смотрите [`WatchOptions`](https://docs.rs/ydb/latest/ydb/struct.WatchOptions.html) в документации крейта. + + ```rust + let description = session.describe_semaphore("my-semaphore").await?; + ``` + +- PHP + + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} + {% endlist %} ### Освобождение семафора {#release-semaphore} @@ -706,6 +817,20 @@ lease.release().join().expectSuccess("release failed"); ``` +- Rust + + Вызовите [`Lease::release`](https://docs.rs/ydb/latest/ydb/struct.Lease.html#method.release) или просто завершите владение `Lease` — при уничтожении значения также отправляется освобождение на сервер. + + ```rust + let lease = session.acquire_semaphore("my-semaphore", 1).await?; + // … + lease.release(); + ``` + +- PHP + + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} + {% endlist %} ## Важные особенности diff --git a/ydb/docs/ru/core/reference/ydb-sdk/health-check-api.md b/ydb/docs/ru/core/reference/ydb-sdk/health-check-api.md index 603951abbf70..3c20b3feeb5a 100644 --- a/ydb/docs/ru/core/reference/ydb-sdk/health-check-api.md +++ b/ydb/docs/ru/core/reference/ydb-sdk/health-check-api.md @@ -8,7 +8,7 @@ - Go - Функциональность на данный момент не поддерживается. + Функциональность на данный момент не поддерживается - C++ @@ -26,26 +26,32 @@ auto result = client.SelfCheck(settings).GetValueSync(); ``` -- Go - - Функциональность на данный момент не поддерживается. - - Java - Функциональность на данный момент не поддерживается. + Функциональность на данный момент не поддерживается - Python - Функциональность на данный момент не поддерживается. + Функциональность на данный момент не поддерживается + - JavaScript - Функциональность на данный момент не поддерживается. Можно сделать клиент для мониторинга и вызывать методы проверки самостоятельно: + Функциональность на данный момент не поддерживается + + Можно сделать клиент для мониторинга и вызывать методы проверки самостоятельно: ```javascript const monitoring = driver.createClient(MonitoringServiceDefinition); await monitoring.selfCheck(); ``` +- Rust + + Функциональность на данный момент не поддерживается + +- PHP + + Функциональность на данный момент не поддерживается {% endlist %} @@ -81,7 +87,7 @@ - Go - Функциональность на данный момент не поддерживается. + Функциональность на данный момент не поддерживается - C++ @@ -93,21 +99,25 @@ }; ``` -- Go - - Функциональность на данный момент не поддерживается. - - Java - Функциональность на данный момент не поддерживается. + Функциональность на данный момент не поддерживается - Python - Функциональность на данный момент не поддерживается. + Функциональность на данный момент не поддерживается - JavaScript - {% include [work-in-progress](../../_includes/work-in-progress.md) %} + Функциональность на данный момент не поддерживается + +- Rust + + Функциональность на данный момент не поддерживается + +- PHP + + Функциональность на данный момент не поддерживается {% endlist %} diff --git a/ydb/docs/ru/core/reference/ydb-sdk/topic.md b/ydb/docs/ru/core/reference/ydb-sdk/topic.md index db1664acc171..c70415fa37fe 100644 --- a/ydb/docs/ru/core/reference/ydb-sdk/topic.md +++ b/ydb/docs/ru/core/reference/ydb-sdk/topic.md @@ -32,6 +32,14 @@ [Примеры на GitHub](https://github.com/ydb-platform/ydb-js-sdk/tree/main/examples/topic) +- Rust + + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} + +- PHP + + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} + {% endlist %} ## Инициализация соединения с топиками @@ -242,6 +250,14 @@ }); ``` +- Rust + + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} + +- PHP + + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} + {% endlist %} ## Управление топиками {#manage} @@ -362,6 +378,14 @@ ); ``` +- Rust + + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} + +- PHP + + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} + {% endlist %} ### Изменение топика {#alter-topic} @@ -460,6 +484,14 @@ ); ``` +- Rust + + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} + +- PHP + + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} + {% endlist %} ### Получение информации о топике {#describe-topic} @@ -539,6 +571,14 @@ ); ``` +- Rust + + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} + +- PHP + + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} + {% endlist %} ### Удаление топика {#drop-topic} @@ -599,6 +639,14 @@ ); ``` +- Rust + + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} + +- PHP + + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} + {% endlist %} ## Запись сообщений {#write} @@ -746,6 +794,14 @@ }); ``` +- Rust + + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} + +- PHP + + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} + {% endlist %} ### Запись сообщений {#writing-messages} @@ -925,6 +981,14 @@ await writer.close(); ``` +- Rust + + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} + +- PHP + + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} + {% endlist %} ### Запись сообщений с подтверждением о сохранении на сервере @@ -1092,6 +1156,14 @@ await writer.flush(); ``` +- Rust + + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} + +- PHP + + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} + {% endlist %} ### Выбор кодека для сжатия сообщений {#codec} @@ -1173,6 +1245,14 @@ }); ``` +- Rust + + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} + +- PHP + + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} + {% endlist %} ### Запись сообщений без дедупликации {#nodedup} @@ -1197,7 +1277,7 @@ - JavaScript - {% include [work-in-progress](../../_includes/work-in-progress.md) %} + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} - Go @@ -1205,7 +1285,15 @@ - Java - Функциональность на данный момент не поддерживается. + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} + +- Rust + + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} + +- PHP + + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} {% endlist %} @@ -1349,6 +1437,14 @@ }); ``` +- Rust + + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} + +- PHP + + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} + {% endlist %} ### Запись в транзакции {#write-tx} @@ -1575,7 +1671,15 @@ - JavaScript - {% include [work-in-progress](../../_includes/work-in-progress.md) %} + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} + +- Rust + + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} + +- PHP + + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} {% endlist %} @@ -1761,6 +1865,14 @@ }); ``` +- Rust + + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} + +- PHP + + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} + {% endlist %} Вы также можете использовать расширенный вариант создания подключения, чтобы указать несколько топиков и задать параметры чтения. Следующий код создаст подключение к топикам `my-topic` и `my-specific-topic` через читателя `my-consumer`: @@ -1882,6 +1994,14 @@ }); ``` +- Rust + + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} + +- PHP + + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} + {% endlist %} ### Чтение сообщений {#reading-messages} @@ -1922,7 +2042,15 @@ - JavaScript - {% include [work-in-progress](../../_includes/work-in-progress.md) %} + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} + +- Rust + + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} + +- PHP + + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} {% endlist %} @@ -2019,6 +2147,14 @@ } ``` +- Rust + + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} + +- PHP + + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} + {% endlist %} #### Чтение сообщений пакетом @@ -2133,6 +2269,14 @@ } ``` +- Rust + + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} + +- PHP + + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} + {% endlist %} ### Чтение с подтверждением обработки сообщений {#commit} @@ -2252,6 +2396,14 @@ } ``` +- Rust + + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} + +- PHP + + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} + {% endlist %} #### Чтение сообщений пакетом с подтверждением @@ -2390,6 +2542,14 @@ } ``` +- Rust + + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} + +- PHP + + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} + {% endlist %} ### Чтение с хранением позиции на клиентской стороне {#client-commit} @@ -2514,6 +2674,14 @@ }); ``` +- Rust + + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} + +- PHP + + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} + {% endlist %} ### Чтение без указания Consumer'а {#no-consumer} @@ -2592,7 +2760,15 @@ - JavaScript - {% include [work-in-progress](../../_includes/work-in-progress.md) %} + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} + +- Rust + + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} + +- PHP + + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} {% endlist %} @@ -2789,11 +2965,17 @@ {% include [java_transaction_requirements](_includes/alerts/java_transaction_requirements.md) %} - {% endlist %} +- Rust + + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} + +- PHP + + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} - JavaScript - {% include [work-in-progress](../../_includes/work-in-progress.md) %} + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} {% endlist %} @@ -2899,7 +3081,15 @@ - JavaScript - {% include [work-in-progress](../../_includes/work-in-progress.md) %} + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} + +- Rust + + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} + +- PHP + + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} {% endlist %} @@ -3002,7 +3192,15 @@ - JavaScript - {% include [work-in-progress](../../_includes/work-in-progress.md) %} + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} + +- Rust + + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} + +- PHP + + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} {% endlist %} @@ -3223,11 +3421,19 @@ - JavaScript - {% include [work-in-progress](../../_includes/work-in-progress.md) %} + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} - Java - Функциональность на данный момент не поддерживается. + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} + +- Rust + + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} + +- PHP + + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} {% endlist %} @@ -3308,7 +3514,7 @@ - JavaScript - {% include [work-in-progress](../../_includes/work-in-progress.md) %} + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} - Java @@ -3329,4 +3535,12 @@ ).join().expectSuccess("Error commit!"); ``` +- Rust + + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} + +- PHP + + {% include [feature-not-supported](../../_includes/feature-not-supported.md) %} + {% endlist %}