RabbitMQ. ื—ืœืง 1. ืžื‘ื•ื. ืืจืœื ื’, AMQP

ืฆื”ืจื™ื™ื ื˜ื•ื‘ื™ื, ื”ื‘ืจ! ืื ื™ ืจื•ืฆื” ืœืฉืชืฃ ืกืคืจ ืœื™ืžื•ื“-ืกืคืจ ืขื–ืจ ืฉืœ ื™ื“ืข ืฉื”ืฆืœื—ืชื™ ืœืืกื•ืฃ ืขืœื™ื• RabbitMQ ื•ืœืจื›ื– ืœื”ืžืœืฆื•ืช ื•ืžืกืงื ื•ืช ืงืฆืจื•ืช.

ืชื•ื›ืŸ ื”ืขื ื™ื™ื ื™ื

  • RabbitMQ. ื—ืœืง 1. ืžื‘ื•ื. Erlang, AMQP ื•-RPC
  • RabbitMQ. ื—ืœืง 2. ื”ื‘ื ืช ื—ื™ืœื•ืคื™ื
  • RabbitMQ. ื—ืœืง 3. ื”ื‘ื ืช ืชื•ืจื™ื ื•ื›ืจื™ื›ื•ืช
  • RabbitMQ. ื—ืœืง 4. ื”ื‘ื ืช ืžื” ื”ื ืžืกืจื™ื ื•ืžืกื’ืจื•ืช
  • RabbitMQ. ื—ืœืง 5: ืคืจืกื•ื ื•ืฆืจื™ื›ืช ื‘ื™ืฆื•ืขื™ ื”ื•ื“ืขื•ืช
  • RabbitMQ. ื—ืœืง 6. ืกืงื™ืจื” ืฉืœ ืžื•ื“ื•ืœื™ ื”ืคื“ืจืฆื™ื” ื•ื”ืฉื•ืคืœ
  • RabbitMQ. ื—ืœืง 7. ืคืจื˜ื™ื ืขืœ ืงื•ื ืงืฉืŸ ื•ืฉืื ืœ
  • RabbitMQ. ื—ืœืง 8. RabbitMQ ื‘-.NET
  • RabbitMQ. ื—ืœืง 9. ื ื™ื˜ื•ืจ

ื‘ืงืฆืจื” ืขืœ AMQP

AMQP (Advanced Message Queuing Protocol) ื”ื•ื ืคืจื•ื˜ื•ืงื•ืœ ืคืชื•ื— ืœื”ืขื‘ืจืช ื”ื•ื“ืขื•ืช ื‘ื™ืŸ ืจื›ื™ื‘ื™ ืžืขืจื›ืช. ื”ืจืขื™ื•ืŸ ื”ื‘ืกื™ืกื™ ื”ื•ื ืฉืชืชื™ ืžืขืจื›ื•ืช ื‘ื•ื“ื“ื•ืช (ืื• ืืคืœื™ืงืฆื™ื•ืช ืขืฆืžืื™ื•ืช) ื™ื›ื•ืœื•ืช ืœื”ื—ืœื™ืฃ ื”ื•ื“ืขื•ืช ื‘ืื•ืคืŸ ืฉืจื™ืจื•ืชื™ ื‘ืืžืฆืขื•ืช ืžืชื•ื•ืš AMQP, ืฉืžื‘ืฆืข ื ื™ืชื•ื‘, ืื•ืœื™ ืžื‘ื˜ื™ื— ืžืกื™ืจื”, ืžืคื™ืฅ ื–ืจืžื™ ื ืชื•ื ื™ื ื•ื ืจืฉื ืœืกื•ื’ื™ ื”ื”ื•ื“ืขื•ืช ื”ืจืฆื•ื™ื™ื.

ืคืจื•ื˜ื•ืงื•ืœ AMQP ืžืฆื™ื’ ืฉืœื•ืฉื” ืžื•ืฉื’ื™ื:

RabbitMQ. ื—ืœืง 1. ืžื‘ื•ื. ืืจืœื ื’, AMQP

  • exchange (ื ืงื•ื“ืช ื”ื—ืœืคื” ืื• ื”ื—ืœืคื”) - ื ืฉืœื—ื•ืช ืืœื™ื” ื”ื•ื“ืขื•ืช. ื ืงื•ื“ืช ื”ื—ืœืคื” ืžืคื™ืฅ ืืช ื”ื”ื•ื“ืขื” ื‘ืชื•ืจ ืื—ื“ ืื• ื™ื•ืชืจ. ื”ื™ื ืžื ืชื‘ ื”ื•ื“ืขื•ืช ืœืชื•ืจ ืžื‘ื•ืกืก ืขืœ ืงื™ืฉื•ืจื™ื ืฉื ื•ืฆืจื• (binding) ื‘ื™ื ื• ืœื‘ื™ืŸ ื”ืชื•ืจ
  • queue (ืชื•ืจ) - ืžื‘ื ื” ื ืชื•ื ื™ื ื‘ื“ื™ืกืง ืื• ื‘-RAM ื›ื™ ืžืื—ืกืŸ ืงื™ืฉื•ืจื™ื ืœื”ื•ื“ืขื•ืช ื•ื ื•ืชืŸ ืขื•ืชืงื™ื ืฉืœ ื”ื•ื“ืขื•ืช consumers (ืœืฆืจื›ื ื™ื)
  • binding (ืžื—ื™ื™ื‘) - ื›ืœืœ ืฉ ืื•ืžืจ ืœื ืงื•ื“ืช ื”ื”ื—ืœืคื” ืœืื™ื–ื” ืชื•ืจ ื”ื”ื•ื“ืขื•ืช ื”ืืœื” ืฆืจื™ื›ื•ืช ืœื”ื™ื›ื ืก

ื”ืคืจื•ื˜ื•ืงื•ืœ ืคื•ืขืœ ืขืœ ื’ื‘ื™ TCP / IP.

ื‘ืงืฆืจื” ืขืœ ืืจืœื ื’

ืงื•ื“ ื”ืžืงื•ืจ ืฉืœ ื”ืคืจื•ื™ืงื˜ ื ืžืฆื ื‘ืžืื’ืจ ื‘ื›ืชื•ื‘ืช GitHub. ืืจื›ื™ื˜ืงื˜ื•ืจื” ืฉืจืช RabbitMQ ืžื‘ื•ืกืก ืขืœ ืืจืœื ื’ ื•-BEAM.

Erlang ืฉืคื•ืชื—ื” ืขืœ ื™ื“ื™ ื”ื—ื‘ืจื” Ericsson ื‘ืืžืฆืข ืฉื ื•ืช ื”-1980 ื›ืžืขืจื›ืช ืžื‘ื•ื–ืจืช, ืกื•ื‘ืœื ื™ืช ืœืชืงืœื•ืช, ื‘ื–ืžืŸ ืืžืช ืขื‘ื•ืจ ื™ื™ืฉื•ืžื™ื ื”ื“ื•ืจืฉื™ื 99,999% ื–ืžืŸ ืคืขื•ืœื”. Erlang ืžืฉืžืฉ ื‘ืชืขืฉื™ื•ืช ืฉื•ื ื•ืช ื•ื™ื™ืฉื•ืžื™ื ืžื•ื“ืจื ื™ื™ื, ืœืžืฉืœ. WhatsApp. ืชื•ื›ืœ ืœืงืจื•ื ืขื•ื“ ื‘ืžืืžืจ ืืจื›ื™ื˜ืงื˜ื•ืจืช WhatsApp, ืฉืคื™ื™ืกื‘ื•ืง ืจื›ืฉื” ืชืžื•ืจืช 19 ืžื™ืœื™ืืจื“ ื“ื•ืœืจ

ื‘ืงืฆืจื” ืขืœ RabbitMQ

RabbitMQ ื”ื•ื ืžืชื•ื•ืš ื”ื•ื“ืขื•ืช ื‘ืงื•ื“ ืคืชื•ื—. ื”ื•ื ืžื ืชื‘ ื”ื•ื“ืขื•ืช ืœืื•ืจืš ื›ืœ ื”ืขืงืจื•ื ื•ืช ื”ื‘ืกื™ืกื™ื™ื ืฉืœ ื”ืคืจื•ื˜ื•ืงื•ืœ AMQP ืžืชื•ืืจ ื‘ ืžืคืจื˜ื™ื. RabbitMQ ืžื™ื™ืฉื ื•ืžืฉืœื™ื ืืช ื”ืคืจื•ื˜ื•ืงื•ืœ AMQP.

ื”ืจืขื™ื•ืŸ ื”ืžืจื›ื–ื™ ืฉืœ ืžื•ื“ืœ ื”ื”ื•ื“ืขื•ืช ื‘ RabbitMQ ื”ืขื ื™ื™ืŸ ื”ื•ื producer (ืžืคืจืกื) ืื™ื ื• ืฉื•ืœื— ื”ื•ื“ืขื•ืช ื™ืฉื™ืจื•ืช ืœืชื•ืจ. ืœืžืขืฉื”, ื•ืœืขืชื™ื ืงืจื•ื‘ื•ืช ืœืžื“ื™, ื”ืžืคืจืกื ืืคื™ืœื• ืœื ื™ื•ื“ืข ืื ื”ื”ื•ื“ืขื” ืชื•ืขื‘ืจ ืœืชื•ืจ ื›ืœืฉื”ื•.

ื‘ืžืงื•ื ื–ืืช, ื”ืžื•ืฆื™ื ืœืื•ืจ ื™ื›ื•ืœ ืœืฉืœื•ื— ืจืง ื”ื•ื“ืขื•ืช ืœื‘ื•ืจืกื”. ืžืฆื“ ืื—ื“, ื”ื‘ื•ืจืกื” ืžืงื‘ืœืช ื”ื•ื“ืขื•ืช ืžื‘ืขืœื™ ืืชืจื™ื, ื•ืžืฆื“ ืฉื ื™ ื”ื™ื ืฉื•ืœื—ืช ืื•ืชืŸ ืœืชื•ืจื™ื. ื”ื—ืœืคืช ื—ื™ื™ื‘ืช ืœื“ืขืช ื‘ื“ื™ื•ืง ืžื” ืœืขืฉื•ืช ืขื ื”ื”ื•ื“ืขื” ืฉื”ื™ื ืžืงื‘ืœืช. ื”ืื ืฆืจื™ืš ืœื”ื•ืกื™ืฃ ืื•ืชื• ืœืชื•ืจ ืžืกื•ื™ื? ื”ืื ืฆืจื™ืš ืœื”ื•ืกื™ืฃ ืื•ืชื• ืœืžืกืคืจ ืชื•ืจื™ื? ืื• ืฉื™ืฉ ืœื”ืชืขืœื ืžื”ื”ื•ื“ืขื”.

RabbitMQ. ื—ืœืง 1. ืžื‘ื•ื. ืืจืœื ื’, AMQP

ืขื‘ื•ื“ื” ืงืฆืจื” RabbitMQ ื ื™ืชืŸ ืœืชืืจ ื›ืš:

  1. ื”ืžื•ืฆื™ื ืœืื•ืจ ืฉื•ืœื— ื”ื•ื“ืขื” ืœื‘ื•ืจืกื” ืกืคืฆื™ืคื™ืช
  2. ื”ื—ืœืคื”, ืœืื—ืจ ืฉืงื™ื‘ืœื” ื”ื•ื“ืขื”, ืžื ืชื‘ืช ืื•ืชื” ืœืชื•ืจ ืื—ื“ ืื• ื™ื•ืชืจ ื‘ื”ืชืื ืœื›ืœืœื™ื ื”ืžื—ื™ื™ื‘ื™ื ื‘ื™ื ื” ืœื‘ื™ืŸ ื”ืชื•ืจ
  3. ื”ืชื•ืจ ืžืื—ืกืŸ ื”ืคื ื™ื” ืœื”ื•ื“ืขื” ื–ื•. ื”ื”ื•ื“ืขื” ืขืฆืžื” ืžืื•ื—ืกื ืช ื‘-RAM ืื• ื‘ื“ื™ืกืง
  4. ื‘ืจื’ืข ืฉื”ืฆืจื›ืŸ ืžื•ื›ืŸ ืœืงื‘ืœ ื”ื•ื“ืขื” ืžื”ืชื•ืจ, ื”ืฉืจืช ื™ื•ืฆืจ ืขื•ืชืง ืฉืœ ื”ื”ื•ื“ืขื” ื“ืจืš ื”ืงื™ืฉื•ืจ ื•ืฉื•ืœื—
  5. ื”ืฆืจื›ืŸ ืžืงื‘ืœ ืืช ื”ื”ื•ื“ืขื” ื•ืฉื•ืœื— ืื™ืฉื•ืจ ืœืžืชื•ื•ืš
  6. ื”ืžืชื•ื•ืš, ืขื ืงื‘ืœืช ื”ืื™ืฉื•ืจ, ืžืกื™ืจ ืขื•ืชืง ืฉืœ ื”ื”ื•ื“ืขื” ืžื”ืชื•ืจ. ืœืื—ืจ ืžื›ืŸ ืžื•ื—ืง ืžื”-RAM ื•ื”ื“ื™ืกืง

RPC

ืชื”ืœื™ืš RPC (ืงืจื™ืื” ืœื”ืœื™ืš ืžืจื—ื•ืง) ืขื•ืžื“ ื‘ื‘ืกื™ืก ื›ืžืขื˜ ื›ืœ ื”ืื™ื ื˜ืจืืงืฆื™ื•ืช ืขื ื”ื’ืจืขื™ืŸ RabbitMQ. ืœืžืฉืœ, ื“ื™ื•ื ื™ื ืจืืฉื•ื ื™ื™ื ืขืœ ืชื ืื™ ื”ืœืงื•ื— ืขื RabbitMQ, ืžื“ื’ื™ื ืชื”ืœื™ืš ืžืกื•ื™ื RPC. ืœืื—ืจ ื”ืฉืœืžืช ื”ืจืฆืฃ ื”ื–ื”, RabbitMQ ื™ื”ื™ื” ืžื•ื›ืŸ ืœืงื‘ืœ ื‘ืงืฉื•ืช ืžื”ืœืงื•ื—:

RabbitMQ. ื—ืœืง 1. ืžื‘ื•ื. ืืจืœื ื’, AMQP

ื’ื ื‘ืžืคืจื˜ AMQP ื’ื ื”ืœืงื•ื— ื•ื’ื ื”ืฉืจืช ื™ื›ื•ืœื™ื ืœื”ื ืคื™ืง ืคืงื•ื“ื•ืช. ื”ืžืฉืžืขื•ืช ื”ื™ื ืฉื”ืœืงื•ื— ืžืžืชื™ืŸ ืœืชืงืฉื•ืจืช ืขื ื”ืฉืจืช. ืคืงื•ื“ื•ืช ื”ืŸ ืžื—ืœืงื•ืช ื•ืฉื™ื˜ื•ืช. ืœื“ื•ื’ืžื”, Connection.Start โ€“ ืงืจื™ืืช ืฉื™ื˜ื” Start ื›ื™ืชื” Connection.

ื—ื™ื‘ื•ืจ ื•ืขืจื•ืฆื™ื

ืขื‘ื•ืจ ื—ื™ืœื•ืคื™ ืžื™ื“ืข ื›ืืœื” ื‘ื™ืŸ ืœืงื•ื— ืœืฉืจืช, ืขืจื•ืฆื™ื. ืขืจื•ืฆื™ื ื ื•ืฆืจื™ื ื‘ืชื•ืš ื—ื™ื‘ื•ืจ ืกืคืฆื™ืคื™. ื›ืœ ืขืจื•ืฅ ืžื‘ื•ื“ื“ ืžืขืจื•ืฆื™ื ืื—ืจื™ื. ื‘ืžืงืจื” ื”ืกื™ื ื›ืจื•ื ื™, ืœื ื ื™ืชืŸ ืœื‘ืฆืข ืืช ื”ืคืงื•ื“ื” ื”ื‘ืื” ืขื“ ืœืงื‘ืœืช ืชื’ื•ื‘ื”.

ืขืœ ืžื ืช ืฉื ื™ืชืŸ ื™ื”ื™ื” ืœืฉืœื•ื— ืคืงื•ื“ื•ืช ื‘ืžืงื‘ื™ืœ, ื™ืฉ ืœืคืชื•ื— ืžืกืคืจ ืขืจื•ืฆื™ื. ื›ืœ ืขืจื•ืฅ ื™ื•ืฆืจ ืขืจื•ืฅ ื ืคืจื“ Erlang ืชื”ืœื™ืš. ืœื—ื™ื‘ื•ืจ ืื—ื“ ื™ื›ื•ืœ ืœื”ื™ื•ืช ืžืกืคืจ ืขืจื•ืฆื™ื (ืจึดื‘ึผื•ึผื‘). ืœื›ืœ ืขืจื•ืฅ ื™ืฉื ื ืžื‘ื ื™ื ื•ืื•ื‘ื™ื™ืงื˜ื™ื ืžืกื•ื™ืžื™ื ื‘ื–ื™ื›ืจื•ืŸ. ืœื›ืŸ, ื›ื›ืœ ืฉื™ืฉ ื™ื•ืชืจ ืขืจื•ืฆื™ื ื‘ืชื•ืš ื—ื™ื‘ื•ืจ, ื” RabbitMQ ืžืฉืชืžืฉ ื™ื•ืชืจ ื‘ื–ื™ื›ืจื•ืŸ ืœื ื”ืœ ื—ื™ื‘ื•ืจ ื›ื–ื”.

RabbitMQ. ื—ืœืง 1. ืžื‘ื•ื. ืืจืœื ื’, AMQP

ื“ื•ื’ืžื” ืคืฉื•ื˜ื” ืœื™ืฆื™ืจืช ื—ื™ื‘ื•ืจ ื•ืขืจื•ืฅ ื‘ืืžืฆืขื•ืช RabbitMQ.Client:

// ...
private void TryConnect()
{
    var factory = new ConnectionFactory() 
    {
        HostName = "host_name",
        UserName = "user_name",
        Password = "p@ssword",
        // ะ’ะบะปัŽั‡ะตะฝะธะต ะฐะฒั‚ะพะผะฐั‚ะธั‡ะตะบะพะณะพ ะฒะพััั‚ะฐะฝะพะฒะปะตะฝะธั
        // ัะพะตะดะธะฝะตะฝะธั ะฟะพัะปะต ัะฑะพะตะฒ ัะตั‚ะธ 
        AutomaticRecoveryEnabled = true
    };
    _connection = factory.CreateConnection();
}
// ...
public void CreateChanel()
{
    _channel = _connection.CreateModel();
    // other options 
}

ืคืชื™ื—ืช ื—ื™ื‘ื•ืจ ื—ื“ืฉ ืขื‘ื•ืจ ื›ืœ ืคืขื•ืœื” ืžื•ืžืœืฆืช ืžืื•ื“ ืžื›ื™ื•ื•ืŸ ืฉื›ืš ื™ื•ื‘ื™ืœ ืœืขืœื•ื™ื•ืช ื’ื‘ื•ื”ื•ืช. ืขืจื•ืฆื™ื ืฆืจื™ื›ื™ื ืœื”ื™ื•ืช ื’ื ืžืชืžืฉื›ื™ื, ืื‘ืœ ืฉื’ื™ืื•ืช ืคืจื•ื˜ื•ืงื•ืœ ืจื‘ื•ืช ื’ื•ืจืžื•ืช ืœืกื’ื™ืจืช ื”ืขืจื•ืฅ, ื›ืš ืฉืื•ืจืš ื”ื—ื™ื™ื ืฉืœ ื”ืขืจื•ืฅ ืขืฉื•ื™ ืœื”ื™ื•ืช ืงืฆืจ ืžื–ื” ืฉืœ ื”ื—ื™ื‘ื•ืจ.

ื”ื™ื›ืŸ ืžืฉืชืžืฉื™ื ื‘- RabbitMQ?

ื‘ื”ืงืฉืจ ืฉืœ ืฉื™ืจื•ืชื™ ืžื™ืงืจื•, ื”ืคืจื•ื˜ื•ืงื•ืœ AMQP ื•ื™ื™ืฉื•ืžื” ื‘ RabbitMQ ืžืฉืžืฉ ืœืขืชื™ื ืงืจื•ื‘ื•ืช ืขื‘ื•ืจ ืื™ื ื˜ืจืืงืฆื™ื” ืืกื™ื ื›ืจื•ื ื™ืช ื‘ื™ืŸ ืฉื™ืจื•ืชื™ื.

ื‘ื”ืงืฉืจ IIOT ืคืจื•ื˜ื•ืงื•ืœ AMQP ื•ื™ื™ืฉื•ืžื” ื‘ RabbitMQ ืžืฉืžืฉ ืœื”ื—ืœืคืช ื ืชื•ื ื™ื ื‘ื™ืŸ ืฉืจืชื™ื (ืฉืจืช-ืฉืจืช). ื”ืฉืชืžืฉ ื’ื ื‘ืชื•ืกืฃ MQTT Plugin RabbitMQ ืฉื”ื•ื ื™ื™ืฉื•ื ืฉืœ ื”ืคืจื•ื˜ื•ืงื•ืœ MQTT ืœื”ืขื‘ืจืช ื ืชื•ื ื™ื ื‘ื™ืŸ ื—ื™ื™ืฉืŸ ืœืฉืจืช ื‘ืกื‘ื™ื‘ื•ืช ืขื ืžื”ื™ืจื•ืช ื ืžื•ื›ื” ื•ื”ืฉื”ื™ื™ื” ื’ื‘ื•ื”ื” (ืจืฉื™ืžื” ืžืœืื” ืฉืœ ืคืจื•ื˜ื•ืงื•ืœื™ื ื ืชืžื›ื™ื ืžื•ืคื™ืขื” ื‘ื›ืชื•ื‘ืช ืืชืจ ื”ืคืจื•ื™ืงื˜).

ื‘ืžืืžืจ ื”ื‘ื ื ืชื—ื™ืœ ืœื”ื‘ื™ืŸ ืืช Exchanges ื‘ื™ืชืจ ืคื™ืจื•ื˜.

ืชื–ื›ื•ืจ

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”