userver: userver/urabbitmq/client.hpp Source File
Loading...
Searching...
No Matches
client.hpp
Go to the documentation of this file.
1#pragma once
2
3/// @file userver/urabbitmq/client.hpp
4/// @brief @copybrief urabbitmq::Client
5
6#include <memory>
7
8#include <userver/clients/dns/resolver_fwd.hpp>
9#include <userver/utils/fast_pimpl.hpp>
10#include <userver/utils/statistics/writer.hpp>
11
12#include <userver/rabbitmq_fwd.hpp>
13#include <userver/urabbitmq/broker_interface.hpp>
14#include <userver/urabbitmq/client_settings.hpp>
15
16USERVER_NAMESPACE_BEGIN
17
18namespace urabbitmq {
19
20class ConsumerBase;
21class ClientImpl;
22
23/// @ingroup userver_clients
24///
25/// @brief Interface for communicating with a RabbitMQ cluster.
26///
27/// Usually retrieved from components::RabbitMQ component.
28class Client
29 : public std::enable_shared_from_this<Client>,
30 public IAdminInterface,
31 public IChannelInterface,
33public:
34 /// Client factory function
35 /// @param resolver asynchronous DNS resolver
36 /// @param settings client settings
37 static std::shared_ptr<Client> Create(clients::dns::Resolver& resolver, const ClientSettings& settings);
38 /// Client destructor
40
42 const Exchange& exchange,
43 Exchange::Type type,
44 utils::Flags<Exchange::Flags> flags,
45 engine::Deadline deadline
46 ) override;
47
48 void DeclareExchange(const Exchange& exchange, Exchange::Type type, engine::Deadline deadline) override {
49 DeclareExchange(exchange, type, {}, deadline);
50 }
51
52 void DeclareExchange(const Exchange& exchange, engine::Deadline deadline) override {
53 DeclareExchange(exchange, Exchange::Type::kFanOut, {}, deadline);
54 }
55
57 const Queue& queue,
58 utils::Flags<Queue::Flags> flags,
59 const std::unordered_map<std::string, HeaderValue>& headers,
60 engine::Deadline deadline
61 ) override;
62
64 DeclareQueue(const Queue& queue, utils::Flags<Queue::Flags> flags, engine::Deadline deadline) override {
65 return DeclareQueue(queue, flags, {}, deadline);
66 }
67
68 QueueDeclareResponse DeclareQueue(const Queue& queue, engine::Deadline deadline) override {
69 return DeclareQueue(queue, {}, {}, deadline);
70 }
71
73 const Exchange& exchange,
74 const Queue& queue,
75 const std::string& routing_key,
76 engine::Deadline deadline
77 ) override;
78
79 void RemoveExchange(const Exchange& exchange, engine::Deadline deadline) override;
80
81 void RemoveQueue(const Queue& queue, engine::Deadline deadline) override;
82
83 /// @brief Get an administrative interface for the broker.
84 ///
85 /// @param deadline deadline for connection acquisition from the pool
86 AdminChannel GetAdminChannel(engine::Deadline deadline);
87
88 void Publish(
89 const Exchange& exchange,
90 const std::string& routing_key,
91 const std::string& message,
92 MessageType type,
93 engine::Deadline deadline
94 ) override {
95 Publish(exchange, routing_key, Envelope{message, type, {}, {}, {}}, deadline);
96 };
97
98 void Publish(
99 const Exchange& exchange,
100 const std::string& routing_key,
101 const std::string& message,
102 engine::Deadline deadline
103 ) override {
104 Publish(exchange, routing_key, message, MessageType::kTransient, deadline);
105 };
106
108 const Exchange& exchange,
109 const std::string& routing_key,
110 const Envelope& envelope,
111 engine::Deadline deadline
112 ) override;
113
114 std::string Get(const Queue& queue, utils::Flags<Queue::Flags> flags, engine::Deadline deadline) override;
115
116 /// @brief Get a publisher interface for the broker.
117 ///
118 /// @param deadline deadline for connection acquisition from the pool
119 Channel GetChannel(engine::Deadline deadline);
120
122 const Exchange& exchange,
123 const std::string& routing_key,
124 const std::string& message,
125 MessageType type,
126 engine::Deadline deadline
127 ) override {
128 PublishReliable(exchange, routing_key, Envelope{message, type, {}, {}, {}}, deadline);
129 }
130
132 const Exchange& exchange,
133 const std::string& routing_key,
134 const std::string& message,
135 engine::Deadline deadline
136 ) override {
137 PublishReliable(exchange, routing_key, message, MessageType::kTransient, deadline);
138 }
139
141 const Exchange& exchange,
142 const std::string& routing_key,
143 const Envelope& envelope,
144 engine::Deadline deadline
145 ) override;
146
147 /// @brief Get a reliable publisher interface for the broker
148 /// (publisher-confirms)
149 ///
150 /// @param deadline deadline for connection acquisition from the pool
151 ReliableChannel GetReliableChannel(engine::Deadline deadline);
152
153 /// Write cluster statistics
154 void WriteStatistics(utils::statistics::Writer& writer) const;
155
156protected:
157 Client(clients::dns::Resolver& resolver, const ClientSettings& settings);
158
159private:
160 friend class ConsumerBase;
161 utils::FastPimpl<ClientImpl, 296, 8> impl_;
162};
163
164} // namespace urabbitmq
165
166USERVER_NAMESPACE_END