Tôi đã tra cứu nó và nó được sử dụng để gửi tin nhắn giữa 2 hệ thống.
Nhưng tại sao? Tại sao bạn không sử dụng Database
?
Phải có một số tính năng mà ActiveMQ
có đó Databases
không?
Tôi đã tra cứu nó và nó được sử dụng để gửi tin nhắn giữa 2 hệ thống.
Nhưng tại sao? Tại sao bạn không sử dụng Database
?
Phải có một số tính năng mà ActiveMQ
có đó Databases
không?
Câu trả lời:
Nó được sử dụng để giao tiếp đáng tin cậy giữa hai quá trình phân tán.
Có, bạn có thể lưu trữ thư trong Cơ sở dữ liệu để liên lạc giữa hai quy trình, nhưng ngay khi nhận được tin nhắn, bạn phải gửi DELETE
tin nhắn, Điều đó có nghĩa là một hàng INSERT
và DELETE
cho mỗi tin nhắn.
Khi bạn cố gắng tăng quy mô lên hàng nghìn tin nhắn mỗi giây, Cơ sở dữ liệu có xu hướng bị đổ .
ActiveMQ
Mặt khác, kho trung gian hướng thông báo [MOM] như được xây dựng để xử lý các trường hợp sử dụng đó.
Họ cho rằng các tin nhắn trong một hệ thống lành mạnh sẽ bị xóa rất nhanh và có thể thực hiện tối ưu hóa để tránh chi phí hoạt động .
Nó cũng có thể đẩy tin nhắn đến người tiêu dùng thay vì người tiêu dùng phải thăm dò tin nhắn mới bằng cách thực hiện truy vấn SQL.
Điều này càng làm giảm độ trễ liên quan đến việc xử lý tin nhắn mới được gửi vào hệ thống.
ActiveMQ
hoặc nói chung, tất cả các triển khai Phần mềm trung gian hướng thư (MOM) được thiết kế cho mục đích gửi tin nhắn giữa hai ứng dụng hoặc hai thành phần bên trong một ứng dụng.
Về cơ bản, MOM và cơ sở dữ liệu chia sẻ một nền tảng chung ở chỗ chúng cung cấp lưu trữ dữ liệu liên tục và liên tục để có thể đọc và ghi từ đó.
Sự khác biệt lớn là mô hình sử dụng - trong đó cơ sở dữ liệu rất chung chung và được tối ưu hóa cho tìm kiếm phức tạp trên nhiều bảng, MOM được tối ưu hóa để đọc tin nhắn, từng cái một, theo kiểu [Hàng đợi].
JMS
, là một API ActiveMQ triển khai, là nền tảng quan trọng trong các ứng dụng Java Enterprise. Điều này làm cho các tin nhắn chia sẻ một định dạng và ngữ nghĩa khá phổ biến, giúp tích hợp giữa các ứng dụng khác nhau dễ dàng hơn.
Tất nhiên, có rất nhiều các tính năng chi tiết hơn mà chỉ có trong ActiveMQ, các giao thức dây như OpenWire
, STOMP
và MQTT
, JMS
, EIP
cùng với Apache Camel, mẫu thông báo như "request / reply" và "xuất bản / đăng ký", JMS Bridging, phân nhóm (" mạng lưới các nhà môi giới "), cho phép nhân rộng và phân phối, v.v.
Bạn nên đọc các chủ đề đó một chút nếu bạn quan tâm vì chúng khá lớn.
ActiveMQ
có hỗ trợ lịch trình tuyệt vời , có nghĩa là bạn có thể lên lịch gửi tin nhắn của mình để được gửi tại một thời điểm cụ thể .
Chúng tôi đã sử dụng tính năng này để gửi lời nhắc thuốc đến bệnh nhân tải lên chi tiết về thuốc trong kịch bản chăm sóc sức khỏe.
Scheduled Jobs
cho các mục đích tương tự.
Với RDBMS, khi bạn xử lý một hàng dữ liệu, bạn thường cập nhật một cờ cho biết hàng đó đã được xử lý để việc xử lý không được lặp lại.
Tuy nhiên, với Hàng đợi Tin nhắn, bạn chỉ phải xác nhận một tin nhắn và người tiêu dùng tiếp theo sẽ xử lý tin nhắn tiếp theo.
Sự khác biệt là việc thống kê UPDATE
trong RDBMS là một hoạt động thực sự chậm so với acknowledge
trong activmeq.
tôi muốn nhấn mạnh như sau:
Decoupling : Các hệ thống có thể giao tiếp mà không cần kết nối. Hàng đợi nằm giữa các hệ thống, một lỗi hệ thống sẽ không bao giờ ảnh hưởng đến việc khác vì giao tiếp được thực hiện thông qua Hàng đợi. Các hệ thống tiếp tục hoạt động khi chúng lên.
Hỗ trợ khôi phục : Các thông báo trong Hàng đợi vẫn tồn tại. Các tin nhắn có thể được khôi phục sau nếu Queue thất bại.
Giao tiếp đáng tin cậy : Xem xét một hệ thống xử lý các yêu cầu của khách hàng. Trong trường hợp bình thường, hệ thống nhận được 100 yêu cầu mỗi phút. Hệ thống này không đáng tin cậy khi số lượng yêu cầu vượt quá mức trung bình. Trong trường hợp như vậy, Queue có thể quản lý các yêu cầu và nó có thể đẩy các thông báo định kỳ dựa trên thông lượng hệ thống mà không phá vỡ nó.
Không đồng bộ : Giao tiếp máy chủ của khách hàng không bị chặn. Khi khách hàng gửi yêu cầu đến máy chủ, nó có thể thực hiện các thao tác khác mà không cần chờ phản hồi. Khi trả lời nó nhận được khách hàng có thể xử lý nó bất cứ lúc nào.
Từ Wikipedia
Apache ActiveMQ là một nhà môi giới thông điệp mã nguồn mở được viết bằng Java cùng với máy khách Dịch vụ thông báo Java (JMS) đầy đủ. Nó cung cấp "Tính năng doanh nghiệp", trong trường hợp này có nghĩa là thúc đẩy giao tiếp từ nhiều khách hàng hoặc máy chủ
Về truy vấn của bạn:
Tại sao bạn không sử dụng cơ sở dữ liệu?
Bạn nên sử dụng cơ sở dữ liệu cho dữ liệu liên tục và không cho dữ liệu tạm thời. Giả sử rằng bạn phải gửi tin nhắn từ Người gửi đến Người nhận. Khi nhận được tin nhắn, Người nhận thực hiện một thao tác (nhận, xử lý và quên). Sau khi xử lý tin nhắn đó, bạn hoàn toàn không cần tin nhắn đó. Trong trường hợp này, lưu trữ thư trong cơ sở dữ liệu liên tục không phải là một giải pháp đúng đắn.
Tôi hoàn toàn đồng ý với câu trả lời của @Hiram Chirino về việc chèn và xóa tin nhắn trong cơ sở dữ liệu nếu bạn sử dụng cơ sở dữ liệu thay vì hệ thống nhắn tin.
Lợi ích từ bài viết này và bài viết này
Có phải tính năng ActiveMQ có cơ sở dữ liệu nào không?
Có nhiều. Có một cái nhìn vào trang tài liệu để biết thêm chi tiết. Có một cái nhìn vào trường hợp sử dụng quá.
Hãy xem bài trình bày này để hiểu nội bộ của ActiveMQ.
Giả sử bạn có một ứng dụng đang được sử dụng tại nhiều địa điểm cùng một lúc. Ngoài ra, giả sử ứng dụng của bạn phải xử lý 1000 yêu cầu mỗi phút hoặc tương tự như vậy để các hoạt động db bình thường không thể xử lý các hoạt động đó, Activemq hoạt động như xử lý tin nhắn, nó sẽ đưa tất cả các tin nhắn vào hàng đợi, vì vậy ngay cả khi một trong các ứng dụng của bạn gặp sự cố tại một vị trí vị trí khác sẽ không bị ảnh hưởng.