ThỏMQ. Phần 1. Giới thiệu. Erlang, AMQP

Chào buổi chiều, Habr! Tôi muốn chia sẻ một cuốn sách kiến ​​thức tham khảo trong sách giáo khoa mà tôi đã sưu tầm được RabbitMQ và cô đọng thành những khuyến nghị và kết luận ngắn gọn.

Mục lục

  • ThỏMQ. Phần 1. Giới thiệu. Erlang, AMQP và RPC
  • ThỏMQ. Phần 2. Tìm hiểu sàn giao dịch
  • ThỏMQ. Phần 3. Tìm hiểu hàng đợi và ràng buộc
  • ThỏMQ. Phần 4. Hiểu thông điệp và khung là gì
  • ThỏMQ. Phần 5: Xuất bản và sử dụng hiệu suất tin nhắn
  • ThỏMQ. Phần 6. Tổng quan về Liên đoàn và Mô-đun Xẻng
  • ThỏMQ. Phần 7. Chi tiết về Connection và Chanel
  • ThỏMQ. Phần 8. RabbitMQ trong .NET
  • ThỏMQ. Phần 9. Giám sát

Sơ lược về AMQP

AMQP (Giao thức xếp hàng tin nhắn nâng cao) là một giao thức mở để truyền tin nhắn giữa các thành phần hệ thống. Ý tưởng cơ bản là các hệ thống con riêng lẻ (hoặc ứng dụng độc lập) có thể trao đổi tin nhắn một cách tùy ý thông qua nhà môi giới AMQP, thực hiện định tuyến, có thể đảm bảo gửi, phân phối luồng dữ liệu và đăng ký các loại tin nhắn mong muốn.

Nghị định thư AMQP đưa ra ba khái niệm:

ThỏMQ. Phần 1. Giới thiệu. Erlang, AMQP

  • exchange (trao đổi điểm hoặc trao đổi) - tin nhắn được gửi đến nó. Điểm trao đổi phân phối tin nhắn trong một hoặc nhiều hàng đợi. Cô ấy định tuyến tin nhắn đến hàng đợi dựa trên các liên kết được tạo (binding) giữa anh ta và hàng đợi
  • queue (hàng đợi) - cấu trúc dữ liệu trên đĩa hoặc trong RAM lưu trữ liên kết đến tin nhắn và cung cấp bản sao của tin nhắn consumers (đến người tiêu dùng)
  • binding (ràng buộc) - một quy tắc rằng cho điểm trao đổi biết những tin nhắn này sẽ được đưa vào hàng đợi nào

Giao thức chạy trên cùng TCP / IP.

Sơ lược về Erlang

Mã nguồn của dự án nằm trong kho lưu trữ tại GitHub. Ngành kiến ​​​​trúc Máy chủ RabbitMQ dựa trên nhị lang và BÙM.

Erlang được phát triển bởi công ty Ericsson vào giữa những năm 1980 dưới dạng hệ thống thời gian thực phân tán, có khả năng chịu lỗi cho các ứng dụng yêu cầu thời gian hoạt động 99,999%. Erlang được sử dụng trong các ngành công nghiệp khác nhau và các ứng dụng hiện đại, ví dụ: WhatsApp. Bạn có thể đọc thêm trong bài viết Kiến trúc WhatsApp được Facebook mua lại với giá 19 tỷ USD

Sơ lược về RabbitMQ

ThỏMQ là một nhà môi giới tin nhắn nguồn mở. Nó định tuyến các thông điệp theo tất cả các nguyên tắc cơ bản của giao thức AMQP diễn tả cái thông số kỹ thuật. RabbitMQ thực hiện và bổ sung giao thức AMQP.

Ý tưởng chính của mô hình nhắn tin trong RabbitMQ điêu đo la producer (nhà xuất bản) không gửi tin nhắn trực tiếp đến hàng đợi. Trên thực tế, và khá thường xuyên, nhà xuất bản thậm chí còn không biết liệu tin nhắn có được gửi đến bất kỳ hàng đợi nào hay không.

Thay vào đó, nhà phát hành chỉ có thể gửi tin nhắn tới sàn giao dịch. Một mặt, sàn giao dịch nhận tin nhắn từ nhà xuất bản, mặt khác gửi chúng đến hàng đợi. Sàn giao dịch phải biết chính xác phải làm gì với thông điệp mà nó nhận được. Nó có nên được thêm vào một hàng đợi cụ thể không? Có nên thêm nó vào nhiều hàng đợi không? Hoặc tin nhắn nên được bỏ qua.

ThỏMQ. Phần 1. Giới thiệu. Erlang, AMQP

công việc ngắn gọn RabbitMQ có thể được mô tả như sau:

  1. Nhà xuất bản gửi tin nhắn đến một trao đổi cụ thể
  2. Một Exchange, sau khi nhận được một tin nhắn, sẽ định tuyến nó đến một hoặc nhiều hàng đợi theo các quy tắc ràng buộc giữa nó và hàng đợi
  3. Hàng đợi lưu trữ một tham chiếu đến thông báo này. Bản thân tin nhắn được lưu trữ trong RAM hoặc trên đĩa
  4. Khi người tiêu dùng đã sẵn sàng nhận tin nhắn từ hàng đợi, máy chủ sẽ tạo một bản sao của tin nhắn qua liên kết và gửi
  5. Người tiêu dùng nhận được tin nhắn và gửi xác nhận cho người môi giới
  6. Người môi giới, sau khi nhận được xác nhận, sẽ xóa một bản sao của tin nhắn khỏi hàng đợi. Sau đó xóa khỏi RAM và đĩa

RPC

quá trình RPC (gọi thủ tục từ xa) làm cơ sở cho hầu hết mọi tương tác với hạt nhân RabbitMQ. Ví dụ: các cuộc thảo luận ban đầu về các điều khoản của khách hàng với RabbitMQ, thể hiện một quá trình nhất định RPC. Khi trình tự này hoàn tất, RabbitMQ sẽ sẵn sàng chấp nhận yêu cầu từ khách hàng:

ThỏMQ. Phần 1. Giới thiệu. Erlang, AMQP

Ngoài ra trong đặc điểm kỹ thuật AMQP cả máy khách và máy chủ đều có thể ra lệnh. Điều này có nghĩa là máy khách đang chờ giao tiếp với máy chủ. Lệnh là các lớp và phương thức. Ví dụ, Connection.Start – gọi phương thức Start lớp Connection.

Kết nối và kênh

Để trao đổi thông tin như vậy giữa máy khách và máy chủ, kênh truyền hình. Các kênh được tạo trong kết nối cụ thể. Mỗi kênh được cách ly với các kênh khác. Trong trường hợp đồng bộ, không thể thực thi lệnh tiếp theo cho đến khi nhận được phản hồi.

Để có thể gửi lệnh song song, bạn phải mở nhiều kênh. Mỗi kênh tạo một kênh riêng biệt Erlang quá trình. Một kết nối có thể có nhiều kênh (multiplexing). Đối với mỗi kênh có các cấu trúc và đối tượng nhất định trong bộ nhớ. Do đó, càng có nhiều kênh trong một kết nối thì RabbitMQ sử dụng nhiều bộ nhớ hơn để quản lý một kết nối như vậy.

ThỏMQ. Phần 1. Giới thiệu. Erlang, AMQP

Một ví dụ đơn giản về việc tạo kết nối và kênh bằng cách sử dụng 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 
}

Việc mở một kết nối mới cho mỗi thao tác không được khuyến khích vì điều này sẽ dẫn đến chi phí cao. Các kênh cũng phải liên tục, nhưng nhiều lỗi giao thức khiến kênh bị đóng, do đó thời gian tồn tại của kênh có thể ngắn hơn thời gian kết nối.

RabbitMQ được sử dụng ở đâu?

Trong bối cảnh của microservice, giao thức AMQP và việc triển khai nó trong RabbitMQ thường được sử dụng cho tương tác không đồng bộ giữa các dịch vụ.

Trong bối cảnh IIOT giao thức AMQP và việc triển khai nó trong RabbitMQ được sử dụng để trao đổi dữ liệu giữa các máy chủ (server-server). Cũng sử dụng plugin Plugin MQTT RabbitMQ đó là việc thực hiện giao thức MQTT để truyền dữ liệu giữa cảm biến và máy chủ trong môi trường tốc độ thấp, độ trễ cao (danh sách đầy đủ các giao thức được hỗ trợ được liệt kê tại trang web dự án).

Trong bài viết tiếp theo chúng ta sẽ bắt đầu tìm hiểu Exchange một cách chi tiết hơn.

tài liệu tham khảo

Nguồn: www.habr.com

Thêm một lời nhận xét