2013-02-26 34 views
9

Theo như tôi có thể nói, không có trường hợp người dùng thích hợp để trao đổi trực tiếp, như bất cứ điều gì bạn có thể làm với nó, bạn có thể thực hiện trao đổi fanout, chỉ mở rộng hơn.Khi sử dụng trao đổi trực tiếp qua trao đổi fanout

Cụ thể hơn khi đọc ThỏMQ đang hoạt động các tác giả đề cập đến trường hợp sử dụng như sau: "Giả sử khi người dùng tải lên ảnh bạn cần tạo hình thu nhỏ. Nhưng sau đó tiếp thị cũng cho bạn biết giải thưởng để tải lên ảnh. Với RabbitMQ, bạn chỉ cần tạo một hàng đợi khác và không làm việc ở phía nhà sản xuất! "

Nhưng đó là chỉ đúng nếu bạn đã có tầm nhìn xa để tạo trao đổi fanout ở phía nhà sản xuất. Theo hiểu biết của tôi, trao đổi trực tiếp không thể thực hiện điều này và chỉ thích hợp khi bạn thực sự muốn ghép nối chặt chẽ giữa trao đổi và xếp hàng, (mà bạn không làm vậy, vì đó là điểm của hệ thống nhắn tin.)

Điều này có chính xác hay không một trường hợp sử dụng thực tế?

Trả lời

0

Bạn có nghĩa là trao đổi fanout hoặc trao đổi chủ đề không? trao đổi fanout rất khác so với trao đổi trực tiếp. Tôi cho rằng việc gửi ảnh đến trao đổi sẽ được gửi cùng với khóa định tuyến chỉ định rằng có ảnh. Trong trường hợp đó bạn có một người tiêu dùng tạo ra hình thu nhỏ và khi bạn muốn thêm một người tiêu dùng mới, bạn chỉ có thể thêm nó và nhận được cùng một thông điệp nhưng làm điều gì đó khác với nó, tức là điểm thưởng.

Trường hợp sử dụng được duy trì. Tôi nghĩ vấn đề là trao đổi ban đầu được tạo ra như một trao đổi trực tiếp.

0

Câu trả lời này vang vọng previousone và nếu bạn tham khảo page này, tôi tin rằng bạn sẽ có trường hợp một sử dụng cụ thể được mô tả là:

trao đổi trực tiếp thường được sử dụng để phân phối nhiệm vụ giữa nhiều công nhân (trường hợp của cùng một ứng dụng) trong một vòng robin.

+0

Câu này trong tài liệu gây nhầm lẫn. Trong thực tế, nếu bạn liên kết một số hàng đợi với cùng một khóa định tuyến đến một trao đổi trực tiếp, tất cả họ sẽ nhận được thông báo nếu phím định tuyến phù hợp. Điều này được giải thích rõ hơn trong [hướng dẫn 4] (https://www.rabbitmq.com/tutorials/tutorial-four-python.html). –

5

So với trao đổi fanout, trao đổi trực tiếp cho phép một số lọc dựa trên khóa định tuyến của tin nhắn để xác định (các) hàng đợi nhận được tin nhắn. Với một trao đổi fanout, không có bộ lọc như vậy và tất cả các tin nhắn đi đến tất cả các hàng đợi bị ràng buộc. Vì vậy, nếu bạn có một trao đổi trực tiếp với một số hàng đợi ràng buộc với cùng một hàng đợi định tuyến, và tất cả các tin nhắn có khóa này, sau đó bạn có hành vi tương tự như trao đổi fanout. Điều này được giải thích rõ hơn trong tutorial 4 on the RabbitMQ website.

Trong trường hợp hình ảnh tải lên sử dụng, bạn có thể sử dụng:

  • một trao đổi fanout với hai hàng đợi (một cho người lao động thu nhỏ, một cho người lao động tính toán số điểm). Khóa định tuyến bị bỏ qua.

    fanout-exchange 
    |--> queue --> thumbnail-worker 
    `--> queue --> score-worker 
    
  • trao đổi trực tiếp với hai hàng đợi khác. Hàng đợi được ràng buộc với khóa image-processing ví dụ và các thư có khóa này sẽ được xếp hàng đợi cho cả hai hàng đợi.

    direct-exchange 
    |--["image-processing"]--> queue --> thumbnail-worker 
    `--["image-processing"]--> queue --> score-worker 
    

    Tất nhiên, nếu khóa định tuyến của thư không khớp với khóa ràng buộc, sẽ không có hàng đợi nào nhận được thư.

Bạn không thể đặt hai công nhân trên cùng một hàng đợi, bởi vì thông điệp sẽ được cân bằng tải giữa chúng: một công nhân sẽ thấy một nửa trong số các thông điệp.

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