2012-02-28 23 views
6

Tôi mới sử dụng tính năng nhắn tin và hiện đang điều tra bằng cách sử dụng RabbitMQ như một phần kiến ​​trúc hệ thống của chúng tôi để cung cấp dịch vụ nhắn tin giữa các dịch vụ khác nhau. Tôi đã hoạt động basic RabbitMQ example và có thể truyền tải tin nhắn văn bản cơ bản qua xe buýt. Có vẻ như EasyNetQ có thể chỉ đơn giản là một số phức tạp của việc sử dụng RabbitMQ, mặc dù tôi gặp một chút rắc rối khi nó hoạt động.Sử dụng EasyNetQ với RabbitMQ để xuất bản và nhận tin nhắn

Thay vì chỉ là một chuỗi, tôi muốn gửi một thông điệp cao cấp hơn đại diện bởi các lớp sau đây:

public class Message 
{ 
    public string Text { get; set; } 
    public int RandomNumber { get; set; } 
    public DateTime Date { get; set; } 
} 

Tôi đang cố gắng gửi thông điệp này bằng việc xuất bản nó vào hàng đợi, và sau đó đã người đăng ký nhặt nó lên khỏi hàng đợi. Mã của tôi là như sau:

Publisher

using (var bus = RabbitHutch.CreateBus("host=localhost")) 
{ 
    var message = new Message() { Text = "Hello World", RandomNumber = new Random().Next(1,100), Date = DateTime.Now }; 
    bus.Publish<Message>(message); 
} 

Receiver

using (var bus = RabbitHutch.CreateBus("host=localhost")) 
{ 
    bus.Subscribe<Message>("test", m => Console.WriteLine(string.Format("Text: {0}, RandomNumber: {1}, Date: {2}", m.Text, m.RandomNumber, m.Date))); 
} 

Cả hai bên dường như kết nối, và nhà xuất bản báo cáo rằng thông điệp đã được công bố:

DEBUG: Trying to connect 
INFO: Connected to RabbitMQ. Broker: 'localhost', VHost: '/' 
DEBUG: Published UserQuery+Message:query_lzzfst, CorrelationId ec81fc89-4d60-4a8b-8ba2-7a6d0818d2ed 

Các thuê bao đăng nhập như sau:

DEBUG: Trying to connect 
INFO: Connected to RabbitMQ. Broker: 'localhost', VHost: '/' 

Dường như các thuê bao là một trong hai không kết nối với một hàng đợi (hoặc hàng đợi đúng), hoặc có cái gì khác tôi cần phải làm để thực sự nhận được thông báo?

Trả lời

17

Xin lỗi Mun, tôi tác giả chính của EasyNetQ, tôi chỉ mới thấy điều này. Vấn đề của bạn là bạn đang vứt bỏ xe buýt ngay khi bạn đã thực hiện đăng ký, vì vậy bạn ngay lập tức ngừng nghe ngay khi bạn đã đăng ký. Tạo bus khi ứng dụng của bạn khởi động, vứt bỏ nó khi nó tắt. Tại sao bạn nên làm điều này được giải thích trong tài liệu ở đây: https://github.com/mikehadlow/EasyNetQ/wiki/Connecting-to-RabbitMQ

Để giải quyết điểm của Simon. Anh ta nói đúng, EasyNetQ được thiết kế có chủ ý để chỉ cung cấp một tập hợp con các khả năng của RabbitMQ để đơn giản hóa API. Chúng tôi hiện cung cấp hai mẫu: pub/sub và request/response. Mong đợi để xem định tuyến dựa trên chủ đề sớm.

+0

Cảm ơn Mike. Đã kết thúc việc tạo trình bao bọc tùy chỉnh để phục vụ nhu cầu của dự án của chúng tôi, nhưng sẽ theo dõi EasyNetQ để biết mọi cập nhật. – Mun

2

RabbitMQ có một tiện ích quản lý (http://www.rabbitmq.com/management.html) là điều cần thiết khi làm việc với thỏ: nó sẽ cho bạn thấy các trao đổi và hàng đợi và khách hàng được kết nối. Vì vậy, bạn sẽ có thể xem nếu người nhận được kết nối với hàng đợi.

Hãy cẩn thận về thứ tự như một Exchange sẽ không giữ một bản sao của một tin nhắn được gửi đến nó; chỉ chuyển nó đến hàng đợi liên kết với nó (hoặc các phiên bản khác trong các phiên bản sau) vì vậy nếu bạn gửi một thông điệp tới một trao đổi và tạo một bộ thu - tạo ra một hàng đợi tạm thời và liên kết hàng đợi này với sự trao đổi. đã được xử lý - RabbitMQ rất nhanh (chỉ cần suy nghĩ to)

EasyNetQ là một phần công việc nhưng không xử lý các tin nhắn ACK có thể là một vấn đề đối với một số loại ứng dụng. RabbitMQ, không giống như những người khác, hỗ trợ mô hình hơn pub/sub nên sử dụng EasyNetQ sẽ hạn chế bạn - mà có thể là một vấn đề phụ thuộc vào ứng dụng của bạn, vv

Cảm ơn

Simon

+0

Đúng, quản lý bổ sung rất hữu ích và chắc chắn cần thiết khi làm bất cứ điều gì với RabbitMQ. – Mun

-3

Tôi cũng bắt đầu chơi với rabbitMQ và easynetQ, chúng là những sản phẩm tuyệt vời. Mike Hedlow là chính xác về làm cho xe buýt một singleton. Tôi đã tạo một dự án mẫu để phản ánh điều này here

Đối tượng MXRabbitBus trong mã của tôi cũng được dự định sử dụng trong một ứng dụng web.

Các vấn đề liên quan