Work with TableView
After setting up your clients, you can explore more to start working with TableView.
Configure TableView
- Java
- C++
The following is an example of how to configure a TableView.
TableView<String> tv = client.newTableViewBuilder(Schema.STRING)
.topic("my-tableview")
.create()
You can use the available parameters in the loadConf configuration or the API TableViewBuilder to customize your TableView.
| Name | Type | Required? | Description | Default |
|---|---|---|---|---|
topic | string | yes | The topic name of the TableView. | N/A |
autoUpdatePartitionInterval | int | no | The interval to check for newly added partitions. | 60 (seconds) |
subscriptionName | string | no | The subscription name of the TableView. | null |
This feature is supported in C++ client 3.2.0 or later versions.
ClientConfiguration clientConfiguration;
clientConfiguration.setPartititionsUpdateInterval(100);
Client client("pulsar://localhost:6650", clientConfiguration);
TableViewConfiguration tableViewConfiguration{schemaInfo, "test-subscription-name"};
TableView tableView;
client.createTableView("my-tableview", tableViewConfiguration, tableView)
You can use the following parameters to customize your TableView.
| Name | Type | Required? | Description | Default |
|---|---|---|---|---|
topic | string | yes | The topic name of the TableView. | N/A |
schemaInfo | struct | no | Declare the schema of the data that this TableView can accept. The schema is checked against the schema of the topic, and the TableView creation fails if it's incompatible. | N/A |
subscriptionName | string | no | The subscription name of the TableView. | reader-{random string} |
partititionsUpdateInterval | int | no | Topic partitions update interval in seconds. In the C++ client, partititionsUpdateInterval is global within the same client. | 60 |
TableView treats a message with a null payload as a tombstone - the key is removed from the map.
forEach(action)iterates over the current map snapshot only, so it does not surface keys that have been tombstoned.forEachAndListen(action)first runsforEachover the current non-tombstoned entries, then registers the action as a live listener. Every subsequent update - including tombstones - is delivered to the listener asaction.accept(key, null). If you need to react to deletions (for example, to clean up downstream state), check forvalue == nullin your listener.
Register listeners
You can register listeners for both existing messages on a topic and new messages coming into the topic by using forEachAndListen, and specify to perform operations for all existing messages by using forEach.
The following is an example of how to register listeners with TableView.
- Java
- C++
// Register listeners for all existing and incoming messages
tv.forEachAndListen((key, value) -> /*operations on all existing and incoming messages*/)
// Register actions for all existing messages
tv.forEach((key, value) -> /*operations on all existing messages*/)
// Register listeners for all existing and incoming messages
tableView.forEach([](const std::string& key, const std::string& value) {});
// Register actions for all existing messages
tableView.forEachAndListen([](const std::string& key, const std::string& value) {});