RabbitMQред рднрд╛рдЧ 2. рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХреА рд╕рдордЭ

Exchange- рдПрдХреНрд╕рдЪреЗрдВрдЬрд░ рдпрд╛ рд╡рд┐рдирд┐рдордп рдмрд┐рдВрджреБред рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕рдВрджреЗрд╢ рднреЗрдЬреЗ рдЬрд╛рддреЗ рд╣реИрдВред Exchange рд╕рдВрджреЗрд╢ рдХреЛ рдПрдХ рдпрд╛ рдЕрдзрд┐рдХ рдХрддрд╛рд░реЛрдВ рдореЗрдВ рд╡рд┐рддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ ред рдпрд╣ рд╕рдВрджреЗрд╢ рдХреЛ рдХрддрд╛рд░ рдХреЗbindings рдмреАрдЪ рдмрдиреЗ рдХрдиреЗрдХреНрд╢рди ( ) рдФрд░ рдХрддрд╛рд░ рдХреЗ рдмреАрдЪ рдХреЗ рдорд╛рд░реНрдЧреЛрдВ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ ред


Exchangeрдирд╣реАрдВ рдПрдХ Erlang рдкреНрд░рдХреНрд░рд┐рдпрд╛ ред рд╕реНрдХреЗрд▓реЗрдмрд┐рд▓рд┐рдЯреА рдХрд╛рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП exchange, рдпрд╣ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИ (рдХреЛрдб рдХреЗ рд╕рд╛рде рдПрдХ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рдЬрд╣рд╛рдВ рд░реВрдЯрд┐рдВрдЧ рд▓реЙрдЬрд┐рдХ рдирд┐рд╣рд┐рдд рд╣реИ) mnesia рдореЗрдВ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдбреЗрдЯрд╛рдмреЗрд╕ ред 1 рд╣рдЬрд╛рд░ рдПрдХреНрд╕рдЪреЗрдВрдЬрд░реНрд╕ рдХреЗрд╡рд▓ 1MB рдореЗрдореЛрд░реА рдХреА рдЦрдкрдд рдХрд░реЗрдВрдЧреЗред


рд╡рд┐рд╖рдп - рд╕реВрдЪреА



рдкреНрд░рддреНрдпрдХреНрд╖ рд╡рд┐рдирд┐рдордп


Direct exchange тАФ , . , . тАФ . .


:


rabbitmq_4


rabbitmq . direct exchange . , .


Topic Exchange


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


  • * тАФ 1
  • # тАФ 0

:


rabbitmq_6


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


Trie-рдЙрджрд╛рд╣рд░рдг


, .


:


  • , .. , direct exchange fanout exchange
  • , * , , #.
  • topic exchange direct exchange

Fanout Exchange


Fanout exchange тАУ .


:


  • RabbitMQ . exchange;
  • ;

:


rabbitmq_5


Headers 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.


:


rabbitmq_7_a


:


  • . (, ) headers . , exchange.

Consistent-Hashing Exchange


RabbitMQ.


Consistent-hashing exchange (exchange ) тАУ , , , . ( 0 - n).


тАУ , ( ). .


:


rabbitmq_7


Hash headers . headers, . headers.


, , .


(E2E)


Exchange-to-Exchange ( AMQP. RabbitMQ).


:


rabbitmq_8


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 ( ). , .

rabbitmq_9


exchange , RPC Exchange.DeclareOk. ( Exchange.Declare), Channel.Close OperationInterruptedException, .


. - тАФ RabbitMQ .


Exchange


RabbitMQ guest (username: guest password: guest). , guest . Exchanges Add a new exchange. :


rabbitmq_18


. , Internal, E2E. Producer .



. , .. (). . .


, , fanout exchange, 1:1 . , fanout exchange .


, topic exchange , , direct exchnge, .. topic exchange.


exchange , , .


exchange .


Queues Bindings.


Code


C#, . .


public interface IExchange
{
    /// <summary>
    ///      ,    . 
    ///        .
    /// </summary>
    string Name { get; }

    /// <summary>
    ///      
    /// </summary>
    string Type { get; }

    /// <summary>
    ///       true,  exchange  
    ///      . 
    ///            
    ///       /. 
    ///       false,  exchange  
    ///        , 
    ///      /  
    /// </summary>
    bool IsDurable { get; }

    /// <summary>
    ///      . Exchange  , 
    ///            
    /// </summary>
    bool IsAutoDelete { get; }

    /// <summary>
    ///      
    /// </summary>
    IDictionary<string, object> Arguments { get; }
}

/// <summary>
///      
/// </summary>
public static class ExchangeType
{
    public const string Direct = "direct";
    public const string Topic = "topic";
    public const string Fanout = "fanout";
    public const string Header = "headers";
}

/// <summary>
///     
/// </summary>
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; }

    /// <summary>
    ///      Exchange  . 
    ///     Exchange   - direct exchnge  .
    ///         ,   
    ///         
    ///          .
    /// </summary>        
    public static IExchange GetDefault()
    {
        return new Exchange("");
    }
}



All Articles