ActiveMQ được sử dụng để làm gì - chúng ta có thể áp dụng khái niệm nhắn tin bằng Cơ sở dữ liệu không?


116

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à ActiveMQcó đó Databaseskhông?


Câu trả lời:


178

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 DELETEtin nhắn, Điều đó có nghĩa là một hàng INSERTDELETEcho 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ị đổ .

ActiveMQMặ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.


Giải thích tốt đẹp! Có phải hai quá trình phân tán phải cùng một quy trình? Ý tôi là hai trường hợp của cùng một ứng dụng?
Maverick

Không, các ứng dụng tùy ý có thể giao tiếp với nhau qua ActiveMQ. Ví dụ: ứng dụng A và B có thể tạo qeues AB và BA (đọc: tin nhắn cho A từ B và ngược lại) và gửi tin nhắn cho nhau đến hàng đợi phù hợp.
Alex

bạn có thể vui lòng xem stackoverflow.com/questions/48579060/ trên không?
gstackoverflow

67

ActiveMQhoặ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, STOMPMQTT, JMS, EIPcù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.


25

ActiveMQcó 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.


3
Điều đó thật tuyệt. Chúng tôi đã sử dụng thư viện lập lịch Quartz cho các mục đích nhắc nhở tương tự.
Siddhartha

Chúng tôi đã sử dụng cơ sở dữ liệu Oracle Scheduled Jobscho các mục đích tương tự.
ahmednabil88

15

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ê UPDATEtrong RDBMS là một hoạt động thực sự chậm so với acknowledgetrong activmeq.


8

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.


7

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àybài viết này

  1. Tích hợp doanh nghiệp : Cho phép các ứng dụng được xây dựng với các ngôn ngữ khác nhau và trên các hệ điều hành khác nhau để tích hợp với nhau
  2. Tính minh bạch của vị trí : Ứng dụng khách không cần biết ứng dụng dịch vụ được đặt ở đâu
  3. Giao tiếp đáng tin cậy - nhà sản xuất / người tiêu dùng tin nhắn không phải có sẵn cùng một lúc
  4. Chia tỷ lệ - có thể mở rộng theo chiều ngang bằng cách thêm nhiều dịch vụ
  5. Giao tiếp không đồng bộ - khách hàng có thể gửi tin nhắn và tiếp tục xử lý khác thay vì chặn cho đến khi dịch vụ đã gửi phản hồi;
  6. Giảm khớp nối - các giả định của khách hàng và dịch vụ được giảm đáng kể do 5 lợi ích trước đó. Một dịch vụ có thể thay đổi chi tiết về chính nó, bao gồm vị trí, giao thức và tính khả dụng của nó, mà không ảnh hưởng hoặc làm gián đoạn máy khách.

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.


2

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.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.