userver: userver/storages/redis/subscribe_client.hpp Source File
Loading...
Searching...
No Matches
subscribe_client.hpp
Go to the documentation of this file.
1#pragma once
2
3/// @file userver/storages/redis/subscribe_client.hpp
4/// @brief @copybrief storages::redis::SubscribeClient
5
6#include <memory>
7#include <string>
8
9#include <userver/storages/redis/base.hpp>
10#include <userver/storages/redis/client_fwd.hpp>
11#include <userver/storages/redis/wait_connected_mode.hpp>
12
13#include <userver/storages/redis/subscription_token.hpp>
14
15USERVER_NAMESPACE_BEGIN
16
17namespace storages::redis {
18
19/// @ingroup userver_clients
20///
21/// @brief Client that allows subscribing to Redis channel messages.
22///
23/// Usually retrieved from components::Redis component.
24///
25/// Callback for each received message is called only
26/// after the execution of callback for previous message has finished. For
27/// parallel message processing use the utils::Async().
28///
29/// @warning Messages can be received in any order due to Redis sharding.
30/// Sometimes messages can be duplicated due to subscriptions rebalancing.
31/// Some messages may be lost (it's a Redis limitation).
32///
33/// @warning The first callback execution can happen before `Subscribe()` or
34/// `Psubscribe()` return as it happens in a separate task.
35///
36/// @note a good GMock-based mock for this class can be found here:
37/// userver/storages/redis/mock_subscribe_client.hpp
39public:
40 virtual ~SubscribeClient();
41
42 virtual SubscriptionToken Subscribe(
43 std::string channel,
44 SubscriptionToken::OnMessageCb on_message_cb,
45 const CommandControl& command_control
46 ) = 0;
47
48 SubscriptionToken Subscribe(std::string channel, SubscriptionToken::OnMessageCb on_message_cb) {
49 return Subscribe(std::move(channel), std::move(on_message_cb), {});
50 }
51
52 virtual SubscriptionToken Psubscribe(
53 std::string pattern,
54 SubscriptionToken::OnPmessageCb on_pmessage_cb,
55 const CommandControl& command_control
56 ) = 0;
57
58 virtual size_t ShardsCount() const = 0;
59 virtual bool IsInClusterMode() const = 0;
60
61 SubscriptionToken Psubscribe(std::string pattern, SubscriptionToken::OnPmessageCb on_pmessage_cb) {
62 return Psubscribe(std::move(pattern), std::move(on_pmessage_cb), {});
63 }
64
65 virtual SubscriptionToken Ssubscribe(
66 std::string channel,
67 SubscriptionToken::OnMessageCb on_message_cb,
68 const CommandControl& command_control
69 ) = 0;
70
71 SubscriptionToken Ssubscribe(std::string channel, SubscriptionToken::OnMessageCb on_message_cb) {
72 return Ssubscribe(std::move(channel), std::move(on_message_cb), {});
73 }
74};
75
76} // namespace storages::redis
77
78USERVER_NAMESPACE_END