ActiveMQ는 무엇에 사용됩니까?
나는 그것을 찾아 당신은 그것에 메시지를 보냅니다. 그런데 왜? 왜 데이터베이스 만 사용하지 않습니까? ActiveMQ에 해당 데이터베이스에없는 기능이 있어야합니까?
두 개의 분산 프로세스간에 안정적으로 통신하는 데 사용됩니다. 예, 두 프로세스간에 통신하기 위해 데이터베이스에 메시지를 저장할 수 있지만, 메시지가 수신되는 즉시 메시지를 삭제해야합니다. 이는 각 메시지에 대해 행 삽입 및 삭제를 의미합니다. 초당 수천 개의 메시지를 통신하도록 확장하려고하면 데이터베이스가 넘어지는 경향이 있습니다.
반면에 ActiveMQ와 같은 메시지 지향 미들웨어는 이러한 사용 사례를 처리하기 위해 구축되었습니다. 정상적인 시스템의 메시지는 매우 빠르게 삭제되며 오버 헤드를 피하기 위해 최적화를 수행 할 수 있다고 가정합니다. 또한 SQL 쿼리를 수행하여 소비자가 새 메시지를 폴링하지 않고 소비자에게 메시지를 푸시 할 수도 있습니다. 이를 통해 시스템으로 전송되는 새 메시지 처리와 관련된 대기 시간이 줄어 듭니다.
ActiveMQ 또는 일반적으로 모든 MOM (Message Oriented Middleware) 구현은 두 응용 프로그램 또는 한 응용 프로그램 내부의 두 구성 요소간에 메시지를 전송하기 위해 설계되었습니다.
기본적으로 MOM과 데이터베이스는 읽고 쓸 수있는 트랜잭션 및 영구 데이터 저장소를 제공한다는 공통된 기초를 공유합니다. 가장 큰 차이점은 사용 패턴입니다. 데이터베이스는 매우 일반적이며 여러 테이블을 통한 복잡한 검색에 최적화되어 있으며 MOM은 한 번에 하나씩 FIFO와 같은 방식으로 메시지를 읽도록 최적화되어 있습니다.
API ActiveMQ가 구현하는 JMS는 Java Enterprise 응용 프로그램에서 중요한 초석입니다. 이로 인해 메시지는 다소 일반적인 형식과 의미를 공유하므로 다른 응용 프로그램간에 쉽게 통합 할 수 있습니다.
물론 ActiveMQ에만있는 더 자세한 기능, Apache Camel과 함께 OpenWire, STOMP 및 MQTT와 같은 유선 프로토콜, JMS, EIP, JMS, "요청 / 응답"및 "게시 / 구독"과 같은 메시지 패턴, JMS가 있습니다. 확장 및 분배 등을 허용하는 브리징, 클러스터링 ( "브로커의 네트워크"). 이러한 주제가 다소 커서 관심이 있으시면이 주제를 조금 읽어보십시오.
Active MQ는 뛰어난 스케줄러를 지원하므로 특정 시간에 메시지가 배달되도록 예약 할 수 있습니다. 이 기능을 사용하여 건강 관리 시나리오에서 약물 세부 정보를 업로드하는 환자에게 약물 미리 알림을 보냅니다.
RDBMS를 사용하면 데이터 행을 처리 할 때 일반적으로 처리가 반복되지 않도록 행이 처리되었음을 나타내는 플래그를 업데이트합니다.
그러나 Message Queue에서는 메시지를 승인하기 만하면 다음 소비자가 다음 메시지를 처리합니다.
차이점은 UPDATE
RDBMS의 acknowlege
통계는 activmeq 와 비교할 때 실제로 느린 조작 입니다.
에서 위키 백과
Apache ActiveMQ는 완전한 Java Message Service (JMS) 클라이언트와 함께 Java로 작성된 오픈 소스 메시지 브로커입니다. 이 경우 "엔터프라이즈 기능"을 제공하며이 경우 둘 이상의 클라이언트 또는 서버와의 통신을 촉진합니다.
귀하의 질문에 관하여 :
왜 데이터베이스를 사용하지 않습니까?
임시 데이터가 아닌 영구 데이터에 데이터베이스를 사용해야합니다. 발신자에서 수신자에게 메시지를 보내야한다고 가정하십시오. 메시지를 수신하면 Receiver는 한 작업 (receive, process 및 forget)을 실행합니다. 해당 메시지를 처리 한 후에는 해당 메시지가 전혀 필요하지 않습니다. 이 경우 영구 데이터베이스에 메시지를 저장하는 것이 올바른 해결책이 아닙니다.
메시징 시스템 대신 데이터베이스를 사용하는 경우 데이터베이스에 메시지 삽입 및 삭제에 관한 @Hiram Chirino의 답변에 전적으로 동의 합니다.
- 엔터프라이즈 통합 : 서로 다른 언어 및 서로 다른 운영 체제로 구축 된 응용 프로그램이 서로 통합되도록 허용
- 위치 투명성 : 클라이언트 응용 프로그램은 서비스 응용 프로그램의 위치를 알 필요가 없습니다.
- 안정적인 통신 – 메시지 생산자 / 소비자가 동시에 사용 가능하지 않아도 됨
- 확장 – 더 많은 서비스를 추가하여 수평 확장 가능
- 비동기 통신 – 클라이언트는 서비스가 응답을 보낼 때까지 메시지를 발생시키고 차단 대신 다른 처리를 계속할 수 있습니다.
- 결합 감소 – 이전 5 가지 이점으로 인해 클라이언트와 서비스의 가정이 크게 줄어 듭니다. 서비스는 클라이언트에 영향을 주거나 방해하지 않고 위치, 프로토콜 및 가용성을 포함하여 자체 정보를 변경할 수 있습니다.
데이터베이스에없는 기능인 ActiveMQ가 있어야합니까?
많이있다. 자세한 내용 은 설명서 페이지를 참조하십시오. 사용 사례 도 살펴보십시오 .
이 프레젠테이션 을 보고 ActiveMQ 내부를 이해하십시오.
다음을 강조하고 싶습니다.
분리됨 : 시스템은 연결하지 않고도 통신 할 수 있습니다. 대기열은 시스템 사이에 있으며, 한 시스템 장애는 대기열을 통해 통신이 수행되므로 다른 시스템에는 영향을 미치지 않습니다. 시스템은 작동 할 때 계속 작동합니다.
복구 지원 : 큐 자체의 메시지가 지속되었습니다. 대기열이 실패하면 나중에 메시지를 복원 할 수 있습니다.
안정적인 커뮤니케이션 : 클라이언트 요청을 처리하는 시스템을 고려하십시오. 일반적인 경우 시스템은 분당 100 개의 요청을받습니다. 요청 수가 평균을 초과하면이 시스템을 신뢰할 수 없습니다. 이러한 경우 큐는 요청을 관리 할 수 있으며 시스템 처리량에 따라 메시지를 중단하지 않고 주기적으로 메시지를 푸시 할 수 있습니다.
비동기 : 클라이언트 서버 통신이 차단되지 않습니다. 클라이언트가 서버에 요청을 보내면 응답을 기다리지 않고 다른 작업을 수행 할 수 있습니다. 응답하면 클라이언트가 언제든지 처리 할 수 있습니다.
여러 위치에서 동시에 사용되는 응용 프로그램이 있다고 가정합니다. 또한 응용 프로그램이 분당 1000 번의 요청 또는 그와 비슷한 것을 처리해야한다고 가정하면 정상적인 DB 작업은 이러한 작업을 처리 할 수 없으므로 Activemq는 모든 메시지를 대기열로 가져 오는 메시지 처리 역할을하므로 응용 프로그램 중 하나가 한 위치에서 충돌하더라도 다른 위치는 영향을받지 않습니다.
참고 URL : https://stackoverflow.com/questions/12805377/what-is-activemq-used-for
'IT박스' 카테고리의 다른 글
인증서를 가져온 후 Java Keytool 오류, "keytool 오류 : java.io.FileNotFoundException & 액세스 거부" (0) | 2020.08.03 |
---|---|
URL / 전화 클릭 가능 UILabel을 만드는 방법은 무엇입니까? (0) | 2020.08.03 |
java.lang.NoClassDefFoundError : Java 메일 용 JUnit 테스트 케이스의 경우 com / sun / mail / util / MailLogger (0) | 2020.08.03 |
방법이 존재하는지 확인 (0) | 2020.08.03 |
SQL-하나의 쿼리에서 여러 레코드 업데이트 (0) | 2020.08.03 |