Exchange
- рдПрдХреНрд╕рдЪреЗрдВрдЬрд░ рдпрд╛ рд╡рд┐рдирд┐рдордп рдмрд┐рдВрджреБред рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕рдВрджреЗрд╢ рднреЗрдЬреЗ рдЬрд╛рддреЗ рд╣реИрдВред Exchange
рд╕рдВрджреЗрд╢ рдХреЛ рдПрдХ рдпрд╛ рдЕрдзрд┐рдХ рдХрддрд╛рд░реЛрдВ рдореЗрдВ рд╡рд┐рддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ ред рдпрд╣ рд╕рдВрджреЗрд╢ рдХреЛ рдХрддрд╛рд░ рдХреЗbindings
рдмреАрдЪ рдмрдиреЗ рдХрдиреЗрдХреНрд╢рди ( ) рдФрд░ рдХрддрд╛рд░ рдХреЗ рдмреАрдЪ рдХреЗ рдорд╛рд░реНрдЧреЛрдВ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ ред
Exchange
рдирд╣реАрдВ рдПрдХ Erlang рдкреНрд░рдХреНрд░рд┐рдпрд╛ ред рд╕реНрдХреЗрд▓реЗрдмрд┐рд▓рд┐рдЯреА рдХрд╛рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП exchange
, рдпрд╣ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИ (рдХреЛрдб рдХреЗ рд╕рд╛рде рдПрдХ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рдЬрд╣рд╛рдВ рд░реВрдЯрд┐рдВрдЧ рд▓реЙрдЬрд┐рдХ рдирд┐рд╣рд┐рдд рд╣реИ) mnesia рдореЗрдВ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдбреЗрдЯрд╛рдмреЗрд╕ ред 1 рд╣рдЬрд╛рд░ рдПрдХреНрд╕рдЪреЗрдВрдЬрд░реНрд╕ рдХреЗрд╡рд▓ 1MB рдореЗрдореЛрд░реА рдХреА рдЦрдкрдд рдХрд░реЗрдВрдЧреЗред
рд╡рд┐рд╖рдп - рд╕реВрдЪреА
рдкреНрд░рддреНрдпрдХреНрд╖ рд╡рд┐рдирд┐рдордп
Direct exchange
тАФ , . , . тАФ . .
:

rabbitmq
. direct exchange
. , .
Topic Exchange
Topic exchange
тАУ direct exchange
. , , . 0
( AZ
az
0-9
), , *
#
.
:

RabbitMQ 2.4.0
topic exchange
145
. trie implementation, . a.b.c
, a.*.b.c
, a.#.c
b.b.c
:

, .
:
- , .. ,
direct exchange
fanout exchange
- ,
*
, , #
. topic exchange
direct exchange
Fanout Exchange
Fanout exchange
тАУ .
:
:

Headers exchange
тАФ (, ) headers
. headers
Dictionary<, >
.
x-match
any
, (, ). or
.
var bindingArguments = new Dictinary<String, Object>();
bindingArguments.add("x-match", "any");
x-match
all
. , (, ). and
.
:

:
- . (, )
headers
. , exchange.
Consistent-Hashing Exchange
RabbitMQ
.
Consistent-hashing exchange
(exchange ) тАУ , , , . ( 0 - n
).
тАУ , ( ). .
:

Hash
headers
. headers
, . headers
.
, , .
(E2E)
Exchange-to-Exchange ( AMQP
. RabbitMQ
).
:

E2E
, , .
Exchange
RPC
. Exchange.Declare
, :
exchange
RabbitMQ.Client:
channel.ExchangeDeclare(
exchange: "my_exchange",
type: "direct",
durable: "false",
autoDelete: "false",
arguments: null
);
exchange
тАФ , .type
тАФdurable
тАФ true
, exchange
. /. false
, exchange
, /autoDelete
тАФ . Exchange
,arguments
тАФ . , alternative exchange
( ). , .

exchange
, RPC
Exchange.DeclareOk
. ( Exchange.Declare
), Channel.Close
OperationInterruptedException, .
. - тАФ RabbitMQ
.
Exchange
RabbitMQ
guest
(username: guest
password: guest
). , guest
. Exchanges
Add a new exchange
. :

. , Internal
, E2E
. Producer
.
. , .. (). . .
, , fanout exchange
, 1:1 . , fanout exchange
.
, topic exchange
, , direct exchnge
, .. topic exchange
.
exchange
, , .
exchange
.
Queues Bindings.
Code
C#, . .
public interface IExchange
{
string Name { get; }
string Type { get; }
bool IsDurable { get; }
bool IsAutoDelete { get; }
IDictionary<string, object> Arguments { get; }
}
public static class ExchangeType
{
public const string Direct = "direct";
public const string Topic = "topic";
public const string Fanout = "fanout";
public const string Header = "headers";
}
public class Exchange : IExchange
{
public Exchange(
string name,
string type = ExchangeType.Direct,
bool durable = true,
bool autoDelete = false,
IDictionary<string, object> arguments = null)
{
Name = name ??
throw new ArgumentNullException(name, $"{name} must not be null");
Type = type;
IsDurable = durable;
IsAutoDelete = autoDelete;
Arguments = arguments ?? new Dictionary<string, object>();
}
public string Name { get; }
public string Type { get; }
public bool IsDurable { get; }
public bool IsAutoDelete { get; }
public IDictionary<string, object> Arguments { get; }
public static IExchange GetDefault()
{
return new Exchange("");
}
}