2010-11-23 2 views
1

우리는 PHP 애플리케이션 용 메시지 대기열을 구현할지 여부를 논의하고 있습니다. 현재 우리는 Apache의 ActiveMQ를보고 있습니다. 우리가 완전히 명확하지 않은 한 가지는 큐에 도착하는 메시지를 기반으로 프로세스를 트리거 할 수 있는지 여부입니다.메시지 큐 : 메시지가 큐에 들어갈 때 이벤트를 트리거 할 수 있습니까?

지금까지 발견 한 문학은 메시지 대기열이 풀 기반 메커니즘임을 나타냅니다. 프로세스는 정기적으로 (데몬 또는 cron으로) 실행되고 수신 메시지를 대기열에서 가져옵니다. 이것을 푸시 메커니즘으로 전환 할 수 있습니까? 즉, 메시지 큐가 실제로 메시지가 도착할 때 HTTP 요청 (또는 프로세스)을 시작하게하는 방법이 있습니까? 우리가 찾은 옵션 중 하나는 Publish/Subscribe 모델입니다. 그러나 이것은 약간의 kludge처럼 느껴지는 ActiveMQ 인스턴스에 대한 개방형 (TCP) 연결을 유지하기 위해 PHP 응용 프로그램을 무한 루프로 실행해야합니다.

모든 입력 사항을 보내 주시면 감사하겠습니다.

답변

1

명백한 해결책은 게시자가 메시지를 저장 한 직후에 HTTP 요청을 시작하도록하는 것이지만, 질문을하기 전에 왜 메시지 대기열을 사용하고 있습니까?

대기열에서 수신 대기하고 메시지가 오면서 소비자가 작업하는 것이 괴롭지는 않지만 좋은 확장 가능한 디자인입니다. (비록 무한 루프에서 PHP 프로세스를 실행하는 것이 좋다고 동의합니다.)

왜 메시지 대기열을 선택 했습니까? "제작자"는 메시지를 테이블에 행으로 저장 한 다음 메시지의 PK로 "소비자"를 트리거 할 수 있습니다.

+1

좋은 질문입니다. 우리가 MQ를 고려하는 이유는 애플리케이션이 프로세스의 다음 단계가 무엇인지를 비즈니스 로직이 지시하는 유연한 워크 플로우쪽으로 이동하기 때문입니다. 메시지 대기열에서 지원하는 "휴지통"패러다임을 사용하는 것은 당연한 것처럼 보입니다. – kander

+0

청취 소비자는 kludge로 간주되는 부분이 아닙니다. 매우 건전한 아키텍처처럼 들립니다. while (1) {$ client-> fetch(); } 바람직하지 않은 구조. – kander

+0

나는 본다. 필자의 개인 의견은 PHP 소비자 데몬을 재검토해야한다는 것입니다. 모든 메시지가 소비자를 유발할 경우 MQ를 사용하는 것이별로 중요하지 않습니다. (1,000,000 개의 메시지가 동시에 도착하면 어떻게됩니까?) - 생산자로부터 소비자 코드를 호출 할 수 있습니다. 그럴 경우. – aib

1

대기열 (JMS 구성 요소)에서 메시지를 가져 와서 HTTP 끝점 (HTTP 구성 요소)으로 전달하는 카멜 루트를 만드는 것이 좋습니다. ActiveMQ 브로커 프로세스에서 Camel 라우트를 호스팅하여 일종의 지능형 라우팅 브로커를 만들 수도 있습니다. ActiveMQ는 Camel Core 라이브러리를 ActiveMQ 배포본에 번들로 묶어서 쉽게 만듭니다. 여기

은 최근 관련/관련 게시물 :

HTTP Post From ActiveMQ using Camel

1

큐를 모니터링하는 응용 프로그램의 당신의 디자인 컨셉은 실행 외부 프로그램을 트리거의 산업 방법이다. IBM Websphere "트리거 모니터 어플리케이션"을 살펴보십시오. 구현시 여러 개의 트리거 모니터를 사용하여 대기열의 메시지를 처리하는 응용 프로그램을 시작할 수 있으므로 트리거 모니터가 응용 프로그램이 설치된 서버에서 실행되므로 확장 성이 뛰어납니다 (확장 성을 위해 설계 한 경우 필요한 경우 여러 개의 앱 서버가 있음).

관련 문제