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("");
}
}