RabbitMQ. Pars 3. Intellectus Queues et Vincula

Queue (queue) - a notitia compages in orbe vel in RAM thesauros references ad epistulas et exempla eorum mittit consumers (to consumers). Queue repraesentat Processus Erlang cum civitate (ubi epistulae ipsae conditivo esse possunt). I mille queues circiter 1Mb occupare possunt.

Binding Regula quae commutator narrat quae nuntiis queue ingressuri sunt.

mensam de contentis in eodem

Temporaria queues

Si queue creatio fit cum modulo paro autoDeleteergo talis queue acquirit facultatem automatice delere te. Tales queues solent creari cum primus clientis connectit et delevit cum omnes clientes disiuncta sunt.

Si queue creatio fit cum modulo paro exclusiveErgo talis queue uno modo ad coniungere dolor concedit et deletum est si clausus canalis est. Usque ad canalem clauditur, client disiungere/coniungere potest, sed solum in eodem nexu. Si modulus exclusive positum est, deinde modulus autoDelete effectum non habet.

Features:

  • in eventus brevi temporis nexus intermissum, nuntiis perdemus quae nondum consumendi attigerunt
  • potes capere phaenomenon binding churn. Phaenomenon accidit cum numerus operationum ad creandos/delendos et ligamenta maximas valores attingit. In modo botro, talis operationum cursus per omnes nodos expandet et magnum onus creabit. Hic processus potest optimized numerum subscriptionum moderante

Constans queues

Si queue creatio fit cum modulo paro durableErgo talis queue retinet statum et restituitur post restarting server/fractorem. Haec queue erit usque ad mandatum dicitur Queue.Delete.

Altus Available Queue

HA Queues RabbitMQ botrum ambitum requirunt. In modo botro, omnes informationes de commutatoribus, queuis, ligaturae et perussores omnibus nodis transcribendae erunt.

Cum nuntius ad HA queue editus est, in singulis nodi HA queue pertinentibus reponitur. Postquam nuntius in una nodo consumptus est, omnia exemplaria illius epistulae in aliis nodis deleta erunt.

HA queues omnes nodos certo racemo vel tantum singulis distribui possunt.

RabbitMQ. Pars 3. Intellectus Queues et Vincula

Features:

  • HA queues usura consequitur in poenis perficiendis. Cum nuntium ponens in HA queue vel nuntium ab HA queue consumendo, RabbitMQ per omnes nodos coordinare debet (nodi 2-3 satis plerumque sunt)

Creando queue

Queue per synchronum est creatus RPC petentibus servo. Quod petitur utendi modum Queue.Declarevocavit parametri:

  • queue nomen
  • alias optiones

Exemplum creando queue utens RabbitMQ.Client:

// ...
channel.QueueDeclare(
    queue: "my_queue",
    durable: false,
    exclusive: false,
    autoDelete: false,
    arguments: null
);
// ...

  • queue - nomen queue creare volumus. Nomen singulare debet esse et non potest idem esse quod nomen systematis queue
  • durable - si verum, erit queue praeter fortunam et restituitur post restarting servo / sectorem
  • exclusive - si verum, queue permittit unum tantum consumere coniungere
  • autoDelete - si verum, queue acquirit automatice delere te
  • arguments — Ad libitum argumentorum. Inspiciamus infra fusius.

rationibus

  • x-message-ttl(x-message-time-to-live) - permittit ut nuntium exspirationis temporis in milliseconds constituas. Si queue creatio occurrit cum ratio pretii paro x-message-ttl, queue talis erit automatice excludere mandata quae exspiraverint. Precium profecta ratio x-message-ttl aetatem maximam omnium nuntiorum in hac queue specificat. Creando queue adiuvat ne accepto outdated notitia. Hoc in systematis real-time systematis adhiberi potest. Si queue pro qua commutator pro reiectis nuntiis ponitur, valorem argumenti pone x-message-ttl, nuntii in queue reiecerunt habere incipiam lifespan.
  • x-expires - valorem in milliseconds constituit, postquam queue deleta est. Queue exspirare non potest nisi si signatores non habet. Si signatores ad queue conexi sunt, solum automatice deletum esse cum omnes subscribentes appellant Basic.Cancel disiuncta or get. A queue exspirare non potest nisi pro eo petitio nulla fuerit Basic.Get. Alioquin valor hodiernae occasus nullatenus ponatur et queue non amplius automatice deleta sit. Also cautiones nullae sunt quomodo queue cito deleta erit postquam vita eius expiravit.
  • x-max-length - numerus maximus nuntios in queue ponit. Si numerus nuntiorum in queue maximum excedere incipit, vetustissimae incipiunt deleri

RabbitMQ. Pars 3. Intellectus Queues et Vincula

  • x-max-lenght-bytes - ponit maximam permissam summam payload magnitudinem epistularum in queue. Si valor superatur (per proximam publicationem nuntii inundat queue), antiquiores nuntii incipient deleri.
  • x-overflow - Hoc argumentum ad mores configurare ex redundantia queue. Duo valores in promptu sunt: drop-head (Defectus valorem) et reject-publish. Si eligere drop-headergo nuntii vetustissimi delebuntur. Si eligere reject-publishergo nuntiis acceptis suspensus erit
  • x-dead-letter-exchange - significat commercium ad quod epistulae reiectae quae non sunt missae sunt petitae
  • x-dead-letter-routing-key - cificat ad libitum excitandas key pro reprobatis nuntiis
  • x-max-priority - permittit genus prioritatis in queue cum maximo valoris 255 (RabbitMQ versionibus 3.5.0 et superiori). Numerus maximam prioritatem indicat quam queue sustinebit. Si argumentum non ponitur, queue nuntium prioritatem non sustinebit
  • x-queue-mode - sino te transferre queue ad piger modus. Hoc modo, quam plurimae epistulae quam maxime fieri possunt, in disco reponentur. Ram usus minimus erit. In casu non occidet, queue epistulas in memoria reponet ut epistulas quam celerrime tradat
  • x-queue-master-locator - si botrum habemus, tunc magistrum queue ponere possumus
  • x-ha-policy - usus est cum HA queues creando et quomodo nuntius inter nodos distribuendus erit. Si profectus est alltunc nuntius in omnibus nodis condietur. Si profectus est nodes, tunc nuntius in certis botri nodis salvus erit
  • x-ha-nodes - nodos specificat quos quaedam queue narrabit HA

RabbitMQ. Pars 3. Intellectus Queues et Vincula

Si creando queue nequicquamergo servo clientem synchronum mittet RPC responsum Queue.DeclareOk. Si creando queue potest (Fuit recusatio ad petitionem Queue.Declare) tum alveo claudet servo per imperium Channel.Close et clientis erit exceptio OperationInterruptedExceptionqui erroris codicem eiusque descriptionem continebit.

Recordare Queue.Declare et similes parametri utilis notitia de hoc reddet queue. Exempli gratia, numerus nuntiorum in dato queue exspectans et numerus consumerent ei subscripsit.

voca Queue.Declare sub documentorum utentis qui iura necessaria non sunt assignata et claudere alveum per imperium Channel.Close et clientis erit exceptio OperationInterruptedException, qui in errore continebit codicem 403 eiusque descriptio.

Post queue otiosa fuerit pro >= 10 secundis, it dormit modusvocando GC in queue, quod sequitur notabile minui in memoria queue requiruntur.

Creando queue per GUI

Vade ad admin panel RabbitMQ sub user " guest (nomen usoris: guest et password; guest). Lorem quod user guest non solum a localhost coniungere. Nunc eamus ad tab Queues and click on Add a new queue. Imple in possessionibus;

RabbitMQ. Pars 3. Intellectus Queues et Vincula

Simulac ingredimur omnia data necessaria et deprime Add queuesqueue in generali indice patebit.

RabbitMQ. Pars 3. Intellectus Queues et Vincula

Clicking in a queue name will display its detailed information. Hic configurare potes obligationem inter commutationem et queue, vide indicem consumers, nuntia ede/accipe, queue delere et inspiciendi mutant.

Creando Paperback

Vinculum creatur usus synchrone RPC petentibus servo. Quod petitur utendi modum Queue.Bindvocavit parametri:

  • queue nomen
  • commutatio punctum nomen eius
  • alias optiones

Exemplum creando binding usura RabbitMQ.Client:

//...
channel.QueueBind(
    queue: queueName,
    exchange: "my_exchange",
    routingKey: "my_key",
    arguments: null
);
//...

  • queue - queue nomen
  • exchange - nomine exchanger
  • routingKey - profectus clavis
  • arguments - ad libitum rationes

RabbitMQ. Pars 3. Intellectus Queues et Vincula

Si creando binding nequicquamergo servo clientem synchronum mittet RPC responsum Queue.BindOk.

Creando obligatio per GUI

Vade ad admin panel RabbitMQ sub user " guest (nomen usoris: guest et password; guest). Lorem quod user guest non solum a localhost coniungere. Nunc eamus ad tab Queues ac click in queue my_queue. Implens sectionem agri bindings:

RabbitMQ. Pars 3. Intellectus Queues et Vincula

Cum intramus omnia data requiritur et click in Bindobligatio in generali indice patebit;

RabbitMQ. Pars 3. Intellectus Queues et Vincula

Codex

In hac sectione queue et ligamen cum C# codice describemus, quasi bibliothecam evolvere opus sit. Hoc fortasse ad perceptionem utile erit.

public interface IQueue
    {        
        string Name { get; }

        /// <summary>
        ///     Если установить true, то queue будет являться постоянным. 
        ///     Она будет храниться на диске и сможет 
        ///     пережить перезапуск сервера/брокера. 
        ///     Если значение false, то queue является временной и будет удаляться, 
        ///     когда сервер/брокер будет перезагружен
        /// </summary>
        bool IsDurable { get; }

        /// <summary>
        ///     Если значение равно true, то 
        ///     такая очередь будет разрешать подключаться 
        ///     только одному consumer-у
        /// </summary>
        bool IsExclusive { get; }

        /// <summary>
        ///     Автоматическое удаление. 
        ///     Очередь будет удалена, когда все клиенты отсоединятся.
        /// </summary>
        bool IsAutoDelete { get; }

        /// <summary>
        ///     Необязательные аргументы
        /// </summary>
        IDictionary<string, object> Arguments { get; }
    }

public class Queue : IQueue
    {
        public Queue(
             string name, 
             bool isDurable = true, 
             bool isExclusive = false, 
             bool isAutoDelete = false, 
             IDictionary<string, object> arguments = null)
        {
            Name = name ??
                throw new ArgumentNullException(name, $"{name} must not be null");

            IsDurable = isDurable;
            IsExclusive = isExclusive;
            IsAutoDelete = isAutoDelete;
            Arguments = arguments ?? new Dictionary<string, object>();
        }

        public string Name { get; }
        public bool IsDurable { get; }
        public bool IsExclusive { get; }
        public bool IsAutoDelete { get; }
        public IDictionary<string, object> Arguments { get; }
    }

public static class QueueMode
    {       
        public const string Default = "default";
        /// <summary>
        ///     Ленивый режим. Ленивый режим заставит сохранять 
        ///     как можно больше сообщений на диске, чтобы уменьшить 
        ///     использование оперативной памяти
        /// </summary>
        public const string Lazy = "lazy";
    }

public interface IBinding
    {
        /// <summary>
        ///     Обменник, который будет связываться привязкой
        /// </summary>
        IExchange Exchange { get; }

        /// <summary>
        ///     Ключ маршрутизации
        /// </summary>
        string RoutingKey { get; }

        /// <summary>
        ///     Необязательные аргументы
        /// </summary>
        IDictionary<string, object> Arguments { get; }
    }

public class Binding : IBinding
    {
        public Binding(
             IExchange exchange, 
             string routingKey, 
             IDictionary<string, object> arguments)
        {
            Exchange = exchange;
            RoutingKey = routingKey;
            Arguments = arguments;
        }

        public IExchange Exchange { get; }
        public string RoutingKey { get; }
        public IDictionary<string, object> Arguments { get; }
    }

Source: www.habr.com

Add a comment