Skip to content

Java: Add client configuration for subscribing to channels.#381

Merged
Yury-Fridlyand merged 8 commits intojava/integ_yuryf_pubsubfrom
java/integ_yuryf_pubsub_config
Jun 26, 2024
Merged

Java: Add client configuration for subscribing to channels.#381
Yury-Fridlyand merged 8 commits intojava/integ_yuryf_pubsubfrom
java/integ_yuryf_pubsub_config

Conversation

@Yury-Fridlyand
Copy link
Copy Markdown

@Yury-Fridlyand Yury-Fridlyand commented Jun 20, 2024

Ref: valkey-io#1602 and valkey-io#1616 and valkey-io#1650

Tested manually with

    @Test
    @SneakyThrows
    public void basic_client() {
        BiConsumer<Object, Object> callback =
            (msg, context) -> System.out.printf("Received %s, context %s\n", msg, context);

        var regularClient =
                RedisClient.CreateClient(
                                RedisClientConfiguration.builder()
                                        .address(NodeAddress.builder().port(6379).build())
                                        .requestTimeout(3000)
                                        .subscriptionConfiguration(
                                                StandaloneSubscriptionConfiguration.builder()
                                                        .subscription(EXACT, "ch1")
                                                        .subscription(PATTERN, "chat*")
                                                        .callback(callback)
                                                        .build())
                                        .build())
                        .get();

        Thread.sleep(100500);
    }

And with redis-cli: publish ch1 $message

TODO (in scope of this PR):

  • Complete docs

Next feature parts (other PRs):

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>
Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>
Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>
Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>
@Yury-Fridlyand Yury-Fridlyand changed the title Java: Add client configuartion for subscribing to channels. Java: Add client configuration for subscribing to channels. Jun 21, 2024
Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>
Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>
Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>
}

if (configuration.getSubscriptionConfiguration() != null) {
var subscriptionsBuilder = PubSubSubscriptions.newBuilder();
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would move this logic to the client, and create & the subscriptions in the constructor. Then you can just use a getter here to grab the subscriptions.

Would reduce duplicate code below.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PubSubSubscriptions is a protobuf class. It is a right place for that.

setupConnectionRequestBuilderBaseConfiguration(configuration);
connectionRequestBuilder.setClusterModeEnabled(true);

if (configuration.getSubscriptionConfiguration() != null) {
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

seems like duplicate code

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Unfortunately I didn't find a wayt to move it to another function. Classes are different for standalone and cluster clients.

* Optional callback to accept the incoming messages. See {@link MessageCallback}.<br>
* If not set, messages will be available via TODO method.<br>
*/
protected final Optional<MessageCallback> callback;
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

feels like callback subscription configuration and queued configuration could be separate objects

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How do you see that?
Is it good enough?

        var regularClient =
                RedisClient.CreateClient(
                                RedisClientConfiguration.builder()
                                        .address(NodeAddress.builder().port(6379).build())
                                        .requestTimeout(3000)
                                        .subscriptionConfiguration(
                                                StandaloneSubscriptionConfiguration.builder()
                                                        .subscription(PubSubChannelMode.EXACT, "ch1")
                                                        .subscription(PubSubChannelMode.PATTERN, "chat*")
                                                                        //   from there
                                                        .build())
                                        .subscriptionCallback(callback) // I moved this
                                        .build())
                        .get();

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>
@Yury-Fridlyand Yury-Fridlyand merged commit bdb4301 into java/integ_yuryf_pubsub Jun 26, 2024
@Yury-Fridlyand Yury-Fridlyand deleted the java/integ_yuryf_pubsub_config branch June 26, 2024 06:09
jamesx-improving pushed a commit that referenced this pull request Jul 1, 2024
* Java: Add client configuration for subscribing to channels. (#381)

* Add client configuartion for subscribing to channels.

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* CLIPPY I HATE YOU

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* Get and store callback.

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* Fix tests.

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* Rework configuration and add docs.

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* Config rework.

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* docs

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* More TODOs for the god of TODOs.

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

---------

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* Add `PUBLISH` and `SPUBLISH` commands. (#391)

* Add `PUBLISH` and `SPUBLISH` commands.

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* Fix the test.

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

---------

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* Java client: receive pubsub messages (#385)

* Add client configuartion for subscribing to channels.

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* CLIPPY I HATE YOU

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* Get and store callback.

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* Fix tests.

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* Rework configuration and add docs.

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* Config rework.

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* docs

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* Receive pushes (subscibed messages).

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* Address PR comments.

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* I HATE YOU SPOTLESS

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* Rename a class.

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

---------

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* Address PR comments.

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* Address PR comments.

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* Java: add IT for pubsub (#400)

* Add some tests.

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* Test fixes.

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* Add more tests.

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* Address PR comments.

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* Experiment

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* Add more tests.

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* Typo fix.

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* Typo fix.

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* I HATE YOU SPOTLESS

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* Typo fix.

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* Uncomment test timeout.

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* Address PR comments.

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* Typo fix.

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* Typo fix.

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* Typo fix.

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* Typo fix.

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

---------

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* Update function signature.

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* Address PR comments.

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* Address PR comments.

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

---------

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>
cyip10 pushed a commit that referenced this pull request Jul 16, 2024
* Java: Add client configuration for subscribing to channels. (#381)

* Add client configuartion for subscribing to channels.

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* CLIPPY I HATE YOU

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* Get and store callback.

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* Fix tests.

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* Rework configuration and add docs.

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* Config rework.

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* docs

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* More TODOs for the god of TODOs.

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

---------

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* Add `PUBLISH` and `SPUBLISH` commands. (#391)

* Add `PUBLISH` and `SPUBLISH` commands.

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* Fix the test.

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

---------

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* Java client: receive pubsub messages (#385)

* Add client configuartion for subscribing to channels.

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* CLIPPY I HATE YOU

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* Get and store callback.

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* Fix tests.

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* Rework configuration and add docs.

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* Config rework.

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* docs

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* Receive pushes (subscibed messages).

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* Address PR comments.

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* I HATE YOU SPOTLESS

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* Rename a class.

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

---------

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* Address PR comments.

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* Address PR comments.

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* Java: add IT for pubsub (#400)

* Add some tests.

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* Test fixes.

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* Add more tests.

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* Address PR comments.

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* Experiment

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* Add more tests.

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* Typo fix.

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* Typo fix.

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* I HATE YOU SPOTLESS

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* Typo fix.

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* Uncomment test timeout.

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* Address PR comments.

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* Typo fix.

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* Typo fix.

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* Typo fix.

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* Typo fix.

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

---------

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* Update function signature.

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* Address PR comments.

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* Address PR comments.

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

---------

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>
Yury-Fridlyand added a commit that referenced this pull request Jun 6, 2025
* Java: Add client configuration for subscribing to channels. (#381)

* Add client configuartion for subscribing to channels.

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* CLIPPY I HATE YOU

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* Get and store callback.

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* Fix tests.

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* Rework configuration and add docs.

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* Config rework.

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* docs

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* More TODOs for the god of TODOs.

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

---------

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* Add `PUBLISH` and `SPUBLISH` commands. (#391)

* Add `PUBLISH` and `SPUBLISH` commands.

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* Fix the test.

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

---------

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* Java client: receive pubsub messages (#385)

* Add client configuartion for subscribing to channels.

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* CLIPPY I HATE YOU

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* Get and store callback.

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* Fix tests.

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* Rework configuration and add docs.

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* Config rework.

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* docs

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* Receive pushes (subscibed messages).

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* Address PR comments.

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* I HATE YOU SPOTLESS

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* Rename a class.

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

---------

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* Address PR comments.

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* Address PR comments.

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* Java: add IT for pubsub (#400)

* Add some tests.

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* Test fixes.

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* Add more tests.

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* Address PR comments.

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* Experiment

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* Add more tests.

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* Typo fix.

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* Typo fix.

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* I HATE YOU SPOTLESS

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* Typo fix.

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* Uncomment test timeout.

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* Address PR comments.

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* Typo fix.

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* Typo fix.

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* Typo fix.

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* Typo fix.

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

---------

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* Update function signature.

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* Address PR comments.

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

* Address PR comments.

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>

---------

Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants