ActiveMQ는 무엇에 사용됩니까? 데이터베이스를 사용하여 메시징 개념을 적용 할 수 있습니까?


116

나는 그것을 찾아서 두 시스템 사이에 메시지를 보내는 데 사용되었습니다.
그런데 왜? 왜 그냥 사용하지 Database않겠습니까?
일부 기능이 있어야 ActiveMQ이있다 Databases하지?


답변:


178

두 분산 프로세스간에 안정적으로 통신하는 데 사용됩니다.

예, 당신은 메시지를 저장할 수있는 데이터베이스 메시지가 당신이해야 할 것 접수되는 즉시, 두 프로세스 사이에 통신 할 수 있지만 DELETE, 메시지 수단 행 그건 INSERTDELETE각 메시지를. 초당 수천 개의 메시지를 전달
하는 규모확장 하려고하면 데이터베이스가 무너지는 경향이 있습니다.

ActiveMQ반면에 메시지 지향 미들웨어 [MOM] 은 이러한 사용 사례를 처리하기 위해 구축되었습니다.
그들은 정상적인 시스템의 메시지가 매우 빨리 삭제 될 것이며 오버 헤드를 피하기 위해 최적화를 수행 할 수 있다고 가정합니다 .

또한 소비자가 SQL 쿼리를 수행하여 새 메시지를 폴링해야하는 대신 소비자에게 메시지를 푸시 할 수도 있습니다.
이는 시스템으로 전송되는 새 메시지 처리와 관련된 대기 시간을 더욱 줄여줍니다.


좋은 설명! 두 분산 프로세스가 동일한 프로세스 여야합니까? 동일한 응용 프로그램의 두 인스턴스를 의미합니까?
Maverick

아니요, 임의의 응용 프로그램은 ActiveMQ를 통해 서로 통신 할 수 있습니다. 예를 들어, 애플리케이션 A와 B는 qeues AB 및 BA를 생성하고 (읽기 : B에서 A에 대한 메시지 및 반대 방향으로) 서로에 대한 메시지를 일치하는 큐에 보낼 수 있습니다.
Alex


67

ActiveMQ또는 일반적으로 모든 MOM (Message Oriented Middleware) 구현은 두 응용 프로그램 또는 한 응용 프로그램 내부의 두 구성 요소간에 메시지보내기 위해 설계되었습니다 .

기본적으로 MOM과 데이터베이스는 읽고 쓸 수있는 트랜잭션 및 영구 데이터 저장소를 제공한다는 점에서 공통 기반을 공유합니다.
가장 큰 차이점은 사용 패턴입니다. 데이터베이스가 매우 일반적이고 여러 테이블에 대한 복잡한 검색에 최적화 된 경우 MOM은 패션 [Queue]와 같은 FIFO에서 한 번에 하나씩 메시지를 읽는 데 최적화되어 있습니다.

JMSActiveMQ가 구현하는 API는 Java Enterprise 애플리케이션의 중요한 초석입니다. 이렇게하면 메시지가 다소 공통된 형식과 의미를 공유하므로 서로 다른 응용 프로그램 간의 통합이 더 쉬워집니다.

물론, 더 자세한 만의 ActiveMQ에있는 기능과 같은 와이어 프로토콜이 많이있다 OpenWire, STOMP그리고 MQTT, JMS, EIP함께 아파치 낙타, 클러스터링, "공개 / 등록"JMS 브리지를 "요청 / 응답"와 같은 메시지 패턴 (와 "은 네트워크 중개자 "), 확장 및 배포 등을 허용합니다.
관심이있는 경우 해당 주제가 다소 크기 때문에 약간 읽어야합니다.


25

ActiveMQ큰있다 스케줄러 을 수행 할 수 있습니다 수단 지원, 특정 시간에 전달되는 메시지를 보내는 일정을 .

우리는이 기능을 사용하여 의료 시나리오에서 약물 세부 정보를 업로드하는 환자에게 약물 알림을 보냅니다.


3
꽤 괜찮은데. 유사한 알림 목적으로 Quartz 스케줄링 라이브러리를 사용했습니다.
Siddhartha

우리는 Scheduled Jobs동일한 목적으로 Oracle 데이터베이스 를 사용했습니다 .
ahmednabil88

15

RDBMS를 사용하면 데이터 행을 처리 할 때 일반적으로 처리가 반복되지 않도록 행이 처리되었음을 나타내는 플래그를 업데이트합니다.

그러나 Message Queue에서는 메시지를 확인하기 만하면 다음 소비자가 다음 메시지를 처리합니다.

차이점은 UPDATERDBMS 의 문장이 acknowledgein activmeq에 비해 정말 느린 작업 이라는 것입니다.


8

다음을 강조하고 싶습니다.

분리됨 : 시스템이 연결되지 않고 통신 할 수 있습니다. 큐는 시스템 사이에 있으며, 통신은 큐를 통해 수행되므로 한 시스템 오류가 다른 시스템에 영향을 미치지 않습니다. 시스템은 작동 중일 때 계속 작동합니다.

복구 지원 : 큐 자체의 메시지가 지속되었습니다. 큐가 실패하면 나중에 메시지를 복원 할 수 있습니다.

안정적인 통신 : 클라이언트 요청을 처리하는 시스템을 고려하십시오. 정상적인 경우 시스템은 분당 100 개의 요청을받습니다. 이 시스템은 요청 수가 평균을 초과하면 신뢰할 수 없습니다. 이러한 경우 Queue는 요청을 관리 할 수 ​​있으며 시스템 처리량에 따라 메시지를 중단하지 않고 주기적으로 푸시 할 수 있습니다.

비동기 : 클라이언트 서버 통신이 차단되지 않습니다. 클라이언트가 서버에 요청을 보내면 응답을 기다리지 않고 다른 작업을 수행 할 수 있습니다. 응답을 받으면 클라이언트는 언제든지 처리 할 수 ​​있습니다.


7

에서 위키 백과

Apache ActiveMQ는 전체 JMS (Java Message Service) 클라이언트와 함께 Java로 작성된 오픈 소스 메시지 브로커입니다. 이 경우 하나 이상의 클라이언트 또는 서버에서 통신을 촉진하는 것을 의미하는 "엔터프라이즈 기능"을 제공합니다.

귀하의 쿼리와 관련하여 :

왜 데이터베이스를 사용하지 않습니까?

임시 데이터가 아닌 영구 데이터에 데이터베이스를 사용해야합니다. 보낸 사람에서받는 사람에게 메시지를 보내야한다고 가정합니다. 메시지 수신시 수신자는 하나의 작업 (수신, 처리 및 삭제)을 실행합니다. 해당 메시지를 처리 ​​한 후에는 해당 메시지가 전혀 필요하지 않습니다. 이 경우 영구 데이터베이스에 메시지를 저장하는 것은 올바른 해결책이 아닙니다.

메시징 시스템 대신 데이터베이스를 사용하는 경우 데이터베이스에 메시지 삽입 및 삭제에 관한 @Hiram Chirino 답변에 전적으로 동의 합니다.

이 혜택 기사 와이 기사

  1. 엔터프라이즈 통합 : 서로 다른 언어 및 서로 다른 운영 체제로 구축 된 애플리케이션이 서로 통합되도록 허용
  2. 위치 투명성 : 클라이언트 응용 프로그램은 서비스 응용 프로그램의 위치를 ​​알 필요가 없습니다.
  3. 안정적인 통신 – 메시지 생성자 / 소비자가 동시에 사용 가능할 필요가 없습니다.
  4. 확장 – 더 많은 서비스를 추가하여 수평 확장 가능
  5. 비동기 통신 – 클라이언트는 서비스가 응답을 보낼 때까지 차단하는 대신 메시지를 실행하고 다른 처리를 계속할 수 있습니다.
  6. 결합 감소 – 이전의 5 가지 이점으로 인해 클라이언트와 서비스의 가정이 크게 감소했습니다. 서비스는 클라이언트에 영향을 주거나 중단하지 않고 위치, 프로토콜 및 가용성을 포함하여 자체에 대한 세부 정보를 변경할 수 있습니다.

ActiveMQ에는 데이터베이스가없는 기능이 있어야합니다.

많이있다. 자세한 내용 은 문서 페이지를 참조하십시오. 사용 사례 도 살펴보십시오 .

프레젠테이션 을 통해 ActiveMQ의 내부를 이해하십시오.


2

동시에 여러 위치에서 사용중인 응용 프로그램이 있다고 가정합니다. 또한 애플리케이션이 분당 1000 개의 요청을 처리해야하므로 정상적인 db 작업이 이러한 작업을 처리 할 수 ​​없다고 가정하면 Activemq는 모든 메시지를 대기열로 가져가는 메시지 처리 역할을하므로 애플리케이션 중 하나가 한 위치에서 충돌하더라도 다른 위치는 영향을받지 않습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.