Hàng đợi tin nhắn php
dotnet new console --name Send mv Send/Program.cs Send/Send.cs dotnet new console --name Receive mv Receive/Program.cs Receive/Receive.cs2 Show dotnet new console --name Send mv Send/Program.cs Send/Send.cs dotnet new console --name Receive mv Receive/Program.cs Receive/Receive.cs3 dotnet new console --name Send mv Send/Program.cs Send/Send.cs dotnet new console --name Receive mv Receive/Program.cs Receive/Receive.cs4 dotnet new console --name Send mv Send/Program.cs Send/Send.cs dotnet new console --name Receive mv Receive/Program.cs Receive/Receive.cs5 dotnet new console --name Send mv Send/Program.cs Send/Send.cs dotnet new console --name Receive mv Receive/Program.cs Receive/Receive.cs6 dotnet new console --name Send mv Send/Program.cs Send/Send.cs dotnet new console --name Receive mv Receive/Program.cs Receive/Receive.cs7 Hướng dẫn này giả định rằng RabbitMQ đã được cài đặt và chạy trên localhost trên (5672). Trong trường hợp bạn sử dụng máy chủ, cổng hoặc thông tin xác thực khác, cài đặt kết nối sẽ yêu cầu điều chỉnh Nhận trợ giúp ở đâuNếu bạn gặp khó khăn khi xem hướng dẫn này, bạn có thể liên hệ với chúng tôi qua cộng đồng RabbitMQ hoặc Slack RabbitMQ là một nhà môi giới tin nhắn. nó chấp nhận và chuyển tiếp tin nhắn. Bạn có thể nghĩ về nó như một bưu điện. khi bạn đặt thư bạn muốn gửi vào hộp thư, bạn có thể chắc chắn rằng người đưa thư cuối cùng sẽ chuyển thư đến người nhận của bạn. Theo cách tương tự này, RabbitMQ là hộp thư, bưu điện và người vận chuyển thư Sự khác biệt chính giữa RabbitMQ và bưu điện là nó không xử lý giấy, thay vào đó, nó chấp nhận, lưu trữ và chuyển tiếp các khối dữ liệu nhị phân - tin nhắn RabbitMQ và nhắn tin nói chung, sử dụng một số biệt ngữ
Lưu ý rằng nhà sản xuất, người tiêu dùng và nhà môi giới không phải cư trú trên cùng một máy chủ; . Một ứng dụng cũng có thể vừa là nhà sản xuất vừa là người tiêu dùng "Chào thế giới"(sử dụng. NET/C# máy khách)Trong phần hướng dẫn này, chúng ta sẽ viết hai chương trình bằng C#; . Chúng tôi sẽ lướt qua một số chi tiết trong. NET client API, tập trung vào điều rất đơn giản này để bắt đầu. Đó là tin nhắn "Xin chào thế giới" Trong sơ đồ bên dưới, "P" là nhà sản xuất của chúng tôi và "C" là người tiêu dùng của chúng tôi. Hộp ở giữa là hàng đợi - bộ đệm tin nhắn mà RabbitMQ giữ thay mặt cho người tiêu dùng
Cài đặtTrước tiên hãy xác minh rằng bạn có. NET Core trong PATH dotnet --help nên tạo ra một thông báo trợ giúp Bây giờ, hãy tạo hai dự án, một cho nhà xuất bản và một cho người tiêu dùng dotnet new console --name Send mv Send/Program.cs Send/Send.cs dotnet new console --name Receive mv Receive/Program.cs Receive/Receive.cs Thao tác này sẽ tạo hai thư mục mới có tên Gửi và Nhận Sau đó, chúng tôi thêm sự phụ thuộc của khách hàng cd Send dotnet add package RabbitMQ.Client cd ../Receive dotnet add package RabbitMQ.Client Bây giờ chúng ta có. NET được thiết lập, chúng ta có thể viết một số mã GửiChúng tôi sẽ gọi cho nhà xuất bản tin nhắn của chúng tôi (người gửi) Gửi. cs và người tiêu dùng tin nhắn của chúng tôi (người nhận) Nhận. cs. Nhà xuất bản sẽ kết nối với RabbitMQ, gửi một tin nhắn, sau đó thoát Trong Gửi. cs, chúng ta cần sử dụng một số không gian tên using System; using RabbitMQ.Client; using System.Text; Thiết lập lớp học class Send { public static void Main() { ... } } sau đó chúng ta có thể tạo kết nối đến máy chủ class Send { public static void Main() { var factory = new ConnectionFactory() { HostName = "localhost" }; using (var connection = factory.CreateConnection()) using (var channel = connection.CreateModel()) { ... } } } Kết nối trừu tượng hóa kết nối ổ cắm và đảm nhiệm việc đàm phán và xác thực phiên bản giao thức, v.v. Ở đây chúng tôi kết nối với nút RabbitMQ trên máy cục bộ - do đó là localhost. Nếu chúng tôi muốn kết nối với một nút trên một máy khác, chúng tôi chỉ cần chỉ định tên máy chủ hoặc địa chỉ IP của nó tại đây Tiếp theo, chúng tôi tạo một kênh, đây là nơi chứa hầu hết các API để hoàn thành công việc Để gửi, chúng tôi phải khai báo một hàng đợi để chúng tôi gửi tới; using System; using RabbitMQ.Client; using System.Text; class Send { public static void Main() { var factory = new ConnectionFactory() { HostName = "localhost" }; using(var connection = factory.CreateConnection()) using(var channel = connection.CreateModel()) { channel.QueueDeclare(queue: "hello", durable: false, exclusive: false, autoDelete: false, arguments: null); string message = "Hello World!"; var body = Encoding.UTF8.GetBytes(message); channel.BasicPublish(exchange: "", routingKey: "hello", basicProperties: null, body: body); Console.WriteLine(" [x] Sent {0}", message); } Console.WriteLine(" Press [enter] to exit."); Console.ReadLine(); } } Khai báo hàng đợi là idempotent - nó sẽ chỉ được tạo nếu nó chưa tồn tại. Nội dung tin nhắn là một mảng byte, vì vậy bạn có thể mã hóa bất cứ thứ gì bạn thích ở đó Khi đoạn mã trên chạy xong, kênh và kết nối sẽ bị loại bỏ. Đó là nó cho nhà xuất bản của chúng tôi Đây là toàn bộ Gửi. lớp cs
nhậnĐối với người tiêu dùng, nó đang lắng nghe tin nhắn từ RabbitMQ. Vì vậy, không giống như nhà xuất bản xuất bản một tin nhắn duy nhất, chúng tôi sẽ giữ cho người tiêu dùng chạy liên tục để nghe tin nhắn và in chúng ra Mã (trong Nhận. cs) có các câu lệnh sử dụng gần giống như Gửi using RabbitMQ.Client; using RabbitMQ.Client.Events; using System; using System.Text; Thiết lập giống như nhà xuất bản; . Lưu ý điều này phù hợp với hàng đợi Gửi xuất bản tới ________số 8Lưu ý rằng chúng tôi cũng khai báo hàng đợi ở đây. Bởi vì chúng tôi có thể bắt đầu người tiêu dùng trước nhà xuất bản, chúng tôi muốn đảm bảo rằng hàng đợi tồn tại trước khi chúng tôi cố gắng sử dụng thư từ nó Chúng tôi chuẩn bị yêu cầu máy chủ gửi cho chúng tôi tin nhắn từ hàng đợi. Vì nó sẽ đẩy các tin nhắn của chúng tôi không đồng bộ, chúng tôi cung cấp một cuộc gọi lại. Đó là những gì EventingBasicConsumer. Trình xử lý sự kiện đã nhận không using RabbitMQ.Client; using RabbitMQ.Client.Events; using System; using System.Text; class Receive { public static void Main() { var factory = new ConnectionFactory() { HostName = "localhost" }; using(var connection = factory.CreateConnection()) using(var channel = connection.CreateModel()) { channel.QueueDeclare(queue: "hello", durable: false, exclusive: false, autoDelete: false, arguments: null); var consumer = new EventingBasicConsumer(channel); consumer.Received += (model, ea) => { var body = ea.Body.ToArray(); var message = Encoding.UTF8.GetString(body); Console.WriteLine(" [x] Received {0}", message); }; channel.BasicConsume(queue: "hello", autoAck: true, consumer: consumer); Console.WriteLine(" Press [enter] to exit."); Console.ReadLine(); } } } Đây là toàn bộ Nhận. lớp cs Để tất cả chúng cùng nhauMở hai thiết bị đầu cuối Bạn có thể chạy các ứng dụng khách theo bất kỳ thứ tự nào, vì cả hai đều khai báo hàng đợi. Chúng tôi sẽ chạy ứng dụng tiêu dùng trước để bạn có thể thấy nó đang chờ và sau đó nhận tin nhắn dotnet new console --name Send mv Send/Program.cs Send/Send.cs dotnet new console --name Receive mv Receive/Program.cs Receive/Receive.cs0 Sau đó chạy nhà sản xuất dotnet new console --name Send mv Send/Program.cs Send/Send.cs dotnet new console --name Receive mv Receive/Program.cs Receive/Receive.cs1 Người tiêu dùng sẽ in thông báo nhận được từ nhà xuất bản qua RabbitMQ. Người tiêu dùng sẽ tiếp tục chạy, chờ tin nhắn, vì vậy hãy thử khởi động lại nhà xuất bản nhiều lần Đã đến lúc chuyển sang phần 2 và xây dựng hàng đợi công việc đơn giản Sản xuất [Non-]Sự phù hợp Tuyên bố miễn trừ trách nhiệmXin lưu ý rằng hướng dẫn này và các hướng dẫn khác đều là hướng dẫn. Họ thể hiện một khái niệm mới tại một thời điểm và có thể cố tình đơn giản hóa một số thứ và loại bỏ những thứ khác. Ví dụ: các chủ đề như quản lý kết nối, xử lý lỗi, khôi phục kết nối, đồng thời và thu thập số liệu phần lớn được bỏ qua vì lý do ngắn gọn. Mã đơn giản hóa như vậy không nên được coi là sẵn sàng sản xuất Vui lòng xem phần còn lại của tài liệu trước khi đưa ứng dụng của bạn vào hoạt động. Chúng tôi đặc biệt đề xuất các hướng dẫn sau. Xác nhận của nhà xuất bản và Xác nhận của người tiêu dùng, Danh sách kiểm tra và giám sát sản xuất Nhận trợ giúp và cung cấp phản hồiNếu bạn có thắc mắc về nội dung của hướng dẫn này hoặc bất kỳ chủ đề nào khác liên quan đến RabbitMQ, đừng ngần ngại hỏi họ trên Giúp chúng tôi cải thiện tài liệuNếu bạn muốn đóng góp một cải tiến cho trang web, nguồn của nó có sẵn trên GitHub. Chỉ cần rẽ nhánh kho lưu trữ và gửi yêu cầu kéo. Cảm ơn bạn |