2013-09-28 116 views
5

Tôi đang sử dụng ZEROMQ cho ứng dụng nhắn tin được phân phối. Cần kết nối máy khách (ổ cắm DEALER) với nhiều máy chủ (ROUTER socket ở phía máy chủ). Các tùy chọn của tôi ở phía CLIENT là gì?zeromq DEALER khách hàng đến nhiều máy chủ (ROUTER)

  1. Tạo ổ cắm DEALER ở phía máy khách cho mỗi điểm cuối máy chủ (ổ cắm ROUTER).
  2. Chỉ tạo một ổ cắm ONE DEALER ở phía máy khách và thêm nhiều điểm cuối.

Tôi đã thử tùy chọn 2 - kết nối với nhiều điểm cuối nhưng thông báo luôn đi đến điểm cuối được kết nối đầu tiên. theo các bước sau:

  • tạo DEALER ổ cắm
  • kết nối với thiết bị đầu cuối đầu tiên
  • sau đó tại thời gian chạy, thêm thiết bị đầu cuối khác để các ổ cắm bằng cách sử dụng socket.connect (endpoint). Tôi có cần phải kết nối lại không?

Trong ổ cắm DEALER, không có tùy chọn để gửi tin nhắn trên điểm cuối cụ thể trong trường hợp thiết bị được kết nối với nhiều điểm cuối.

Bất kỳ ý tưởng nào?

Trả lời

3

ZeroMQ mã hóa một số hành vi nhất định thành các loại socket. Những chủ yếu đối phó với:

  1. xử lý nhiều đồng nghiệp
  2. xử lý thư không gửi
  3. xử lý thông quá mức (HWM)

Một socket DEALER là một trong đó có thể kết nối với nhiều đồng nghiệp, và sử dụng LRU (ít được sử dụng gần đây nhất, hay còn gọi là round-robin) để quyết định người ngang hàng nào nhận được mỗi tin nhắn. Nếu bạn không muốn hành vi này, sau đó bạn không muốn một ổ cắm DEALER với nhiều đồng nghiệp.

Nếu bạn muốn quyết định ngang hàng nhận được một tin nhắn, có hai tùy chọn cho việc này:

  1. tạo DEALER per peer, và gửi vào các ổ cắm phù hợp
  2. tạo một router duy nhất kết nối với tất cả đồng nghiệp và sử dụng tiền tố IDENTITY để định tuyến thư. Bạn có thể cần phải vượt qua IDENTITIES thông qua một kênh phụ, để sử dụng kết nối ROUTER-ROUTER.

khi chạy, thêm điểm cuối khác vào ổ cắm bằng cách sử dụng socket.connect(endpoint). Tôi có cần phải kết nối lại không?

Không, bạn không cần phải kết nối lại. Bạn có thể thêm (và xóa) các đồng nghiệp bất kỳ lúc nào trong chương trình.