1) Chính, chi phí của Spring JMS là sử dụng JmsTemplate để gửi tin nhắn không có cơ chế lưu vào bộ nhớ đệm bên dưới.Về cơ bản, JmsTemplate sẽ làm như sau cho mỗi tin nhắn bạn gửi:
- Tạo kết nối
- Tạo phiên
- Tạo Nhà sản xuất
- Create Message
- Gửi tin nhắn
- Đóng phiên
- Đóng kết nối
này có thể được so sánh với tay mã được viết nơi bạn sử dụng lại điều:
- Tạo kết nối
- Tạo phiên
- Tạo Nhà sản xuất
- Create Message
- Gửi tin nhắn
- Create Message
- Gửi tin nhắn
- Create Message
- Gửi tin nhắn
- Đóng phiên
- Đóng kết nối
Từ việc tạo ra các kết nối, các phiên và nhà sản xuất cần giao tiếp giữa khách hàng và nhà cung cấp JMS và, tất nhiên, phân bổ nguồn lực, nó sẽ tạo ra chi phí khá lớn cho rất nhiều tin nhắn nhỏ.
Bạn có thể dễ dàng tìm hiểu điều này bằng cách lưu vào bộ nhớ cache tài nguyên JMS. Ví dụ, sử dụng mùa xuân CachingConnectionFactory hoặc ActiveMQs PooledConnectionFactory (nếu bạn đang sử dụng ActiveMQ, bạn đã gắn thẻ câu hỏi này).
Nếu bạn đang chạy bên trong một thùng chứa JavaEE đầy đủ, việc gộp/lưu bộ nhớ đệm thường được xây dựng và ngầm định khi bạn truy xuất nhà máy kết nối JNDI của mình.
Khi cập nhật, sử dụng thùng chứa thông báo mặc định vào mùa xuân, có một lớp mỏng vào mùa xuân có thể tăng thêm chi phí, nhưng các khía cạnh chính là bạn có thể tinh chỉnh hiệu suất về mặt đồng thời v.v. This article giải thích rất rõ.
2)
PubSub là mẫu sử dụng, nơi nhà xuất bản không cần biết người đăng ký nào tồn tại. Bạn không thể đơn giản mô phỏng điều đó với p2p. Và, nếu không có bất kỳ bằng chứng nào, tôi sẽ cho rằng nếu bạn muốn gửi một thông điệp giống hệt nhau từ một ứng dụng đến mười ứng dụng khác, thiết lập pub-sub sẽ nhanh hơn gửi tin nhắn mười lần p2p.
Mặt khác, nếu bạn chỉ có một nhà sản xuất và một người tiêu dùng, hãy chọn mẫu P2P có hàng đợi thay vì vì nó dễ quản lý hơn ở một số khía cạnh. P2P (hàng đợi) cho phép cân bằng tải, mà pub/sub không (dễ dàng).
ActiveMQ cũng có phiên bản hybride, VirtualDestinations - chủ yếu là các chủ đề có cân bằng tải.
Việc triển khai thực tế khác nhau bởi các nhà cung cấp khác nhau, nhưng chủ đề và hàng đợi không khác biệt về cơ bản và nên hoạt động với hiệu suất tương tự. Thay vào đó, những gì bạn nên kiểm tra là:
- Tính bền vững? (= chậm hơn)
- Bộ chọn thư? (= chậm hơn)
- Đồng thời?
- Người đăng ký bền? (= Chậm hơn)
- Yêu cầu/trả lời, "đồng bộ" với hàng đợi tạm thời (= overhead = chậm hơn)
- Queue tìm nạp trước (= tác động hiệu quả trong một số khía cạnh)
- Caching
Great câu trả lời, chỉ là một bổ sung nhỏ để chủ đề vs hàng đợi (bạn đang loại nhắc đến nó, nhưng sẽ là tốt để làm cho nó rõ ràng). Chủ đề đảm bảo rằng mọi đăng ký trực tuyến hoặc ngoại tuyến bền vững cho một chủ đề sẽ nhận được một tin nhắn. Hàng đợi đảm bảo rằng một và chỉ một người đăng ký sẽ xử lý một thông báo. Bên cạnh đó, các chủ đề có thể được sử dụng cho giao tiếp 1-1 và hàng đợi có thể có nhiều nhà xuất bản và người đăng ký cân bằng tải. Đó là mặc dù để làm cân bằng tải với các chủ đề đơn giản, và nó là không hiệu quả để làm sự kiện phân phối với hàng đợi. Ngựa cho các khóa học. – ddimitrov
Điểm tốt, cảm ơn bạn đã làm rõ điều đó. –