TGViewer
Flutter Friendly Flutter Friendly @flutterfriendly · 996 subscribers
Post #350 851
🪙Привет, это Катя, Flutter Dev Friflex

Сегодня я хочу рассказать вам о библиотеке dart_amqp — полнофункциональном клиенте для работы с протоколом AMQP (Advanced Message Queue Protocol). Эта библиотека позволяет приложениям взаимодействовать с брокерами сообщений, такими как RabbitMQ.

Что такое dart_amqp?
dart_amqp
— это клиентская библиотека для работы с AMQP-серверами, которая предоставляет удобный API для создания распределенных систем обмена сообщениями. Она поддерживает все основные возможности протокола AMQP, включая очереди, обменники, подтверждения сообщений и транзакции.

Создание клиента
▪️Настройка подключения

Для тонкой настройки подключения используется класс ConnectionSettings, который позволяет переопределить параметры по умолчанию:

Client client = Client(
  settings: ConnectionSettings(
    host: "127.0.0.1",
    port: 5672,
    virtualHost: "/",
    authProvider: PlainAuthenticationProvider("guest", "guest"),
    maxConnectionAttempts: 1,
    reconnectWaitTime: Duration(milliseconds: 1500),
  ),
);


▪️Подключение к серверу
Клиент подключается к серверу лениво, но можно установить соединение явно:

await client.connect();


Аутентификация
Библиотека поставляется с двумя провайдерами аутентификации:
▫️PlainAuthenticationProvider — для простой аутентификации по логину и паролю
▫️AmqPlainAuthenticationProvider — альтернативный вариант Plain-аутентификации
▫️Можно создать собственный провайдер, реализовав интерфейс Authenticator

Работа с TLS
Для защищенных соединений можно передать SecurityContext:

Client client = Client(
  settings: ConnectionSettings(
    tlsContext: SecurityContext()
      ..setTrustedCertificates('path/to/cert.pem'),
    onBadCertificate: (certificate) => false,
  ),
);


Heartbeat
Heartbeat позволяет клиенту и серверу отслеживать активность соединения. Если обе стороны указывают ненулевой период (> 1 секунды), механизм активируется автоматически:

Client client = Client(
  settings: ConnectionSettings(
    tuningSettings: TuningSettings(
      heartbeatPeriod: const Duration(seconds: 60),
    ),
  ),
);
await client.connect();
print(client.tuningSettings.heartbeatPeriod);


Если сервер не отвечает в течение согласованного периода, выбрасывается исключение HeartbeatFailedException.

Работа с каналами
Каналы (Channels) — это виртуальные соединения внутри одного TCP-подключения:

Channel channel = await client.channel();


queue() — объявить именованную очередь
exchange() — объявить обменник для маршрутизации сообщений
select() — начать транзакцию
commit() — зафиксировать транзакцию
rollback() — откатить транзакцию

Работа с очередями

// Создание очереди
Queue queue = await channel.queue("my_queue");
// Публикация сообщения
queue.publish("Flutter Friendly");
// Потребление сообщений
Consumer consumer = await queue.consume();
consumer.listen((AmqpMessage message) {
  print("Получено: ${message.payloadAsString}");
  message.ack(); // Подтвердить обработку
});


Exchanges
Обменники позволяют маршрутизировать сообщения к нескольким получателям.

Exchange exchange = await channel.exchange(
  "my_exchange",
  ExchangeType.FANOUT,
);

// Публикация через обменник
exchange.publish("Broadcast message", "routing_key");

// Привязка потребителя
Consumer consumer = await exchange.bindPrivateQueueConsumer(
  ["routing_key"],
);

consumer.listen((AmqpMessage message) {
  print("Сообщение из exchange: ${message.payloadAsString}");
});


❓Если вам интересна эта тема, то в следующей статье я объясню работу с AmqpMessage, Publisher Confirms, обработку ошибок и реальные примеры работы с несколькими RabbitMQ инстансами одновременно.
  • 🔥 14
  • ❤ 4
  • ❤‍🔥 3
More from @flutterfriendly
  1. May 14, 2026👀Какой сложный вопрос или тема по Flutter вас сейчас беспокоят? Может, задача не идет, ба…
  2. Apr 17, 2026💭Привет! Это Роза, Flutter-разработчица Friflex! Уверена, многие из вас знакомы с Dart De…
  3. Apr 8, 2026Привет, друзья! Делимся нашей страничкой на Хабре, чтобы всегда оставаться на связи. Там е…
  4. Apr 3, 2026🌸Апрель в календаре и на экране Весна зовет обновлять визуальное: убирать темные темы и в…
  5. Apr 1, 2026Всегда с нетерпением ждем этого дня, чтобы сделать подборку ИТ-мемов Пусть поводов для улы…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →