2017-04-14 8 views
0

노드 RED 및 MQTT를 사용하는 오케스트레이션 시스템에서 작업하고 있습니다. 나는 치료로부터 사건 획득을 분리하기로 결정했다. 주요 목표는 대기열에있는 이벤트를 신속하게 푸시하고 가능한 한 빨리 실시간으로 처리하는 것입니다.노드 -RED 및 MQTT의 동기 소비

시스템은 다음과 같이 작동합니다 :

  1. 나는 듣고에서 이벤트를 읽어 다른 흐름에 HTTP 나머지 API에 대한 이벤트,
  2. 밀어 MQTT 주제에이 이벤트,
  3. 를받을 MQTT 주제,
  4. 이 이벤트에서 몇 가지 조치/프로세스를 시작하십시오 (최대 5/10 초).

하지만 문제가 발생했습니다. 두 개의 관련 이벤트가 너무 빨리 수신되면 두 번째 이벤트가 첫 번째 이벤트 처리를 변경할 수 있습니다. 이를 해결하기 위해 이벤트 소비/처리를 동기화하여 순서대로 유지하려고합니다.

MQTT QoS 2 메시지가 순서대로 전달됩니다. 노드 - 레드에서 동기화 패러다임을 간단하게 구현하려면 어떻게해야합니까? 이벤트 처리 중 MQTT Client 수신을 피할 수 있습니까?

답변

1

아니오, MQTT 클라이언트를 켤 수 없습니다.

아니요. 모든 NodeJS 앱이 순수하게 단일 스레드이므로 2 가지 일들이 실제로 발생할 수 없기 때문에 동기화 개념이 없습니다. IO 바인딩에 도달하면 작업이 정상적으로 처리됩니다.

실제로 HTTP를 통해 수신 한 다음 MQTT를 통해 다시 소비하는 것이 확실하지는 않습니다.

들어오는 이벤트를 대기열에 넣으려면 지연 노드를 사용하여 처리가 관리 할 수있는 것으로 입력을 제한 할 수 있습니다. 속도 제한 옵션에는 메시지를 삭제하는 모드와 메시지를 삭제하는 모드의 두 가지 모드가 있습니다.

+0

MQTT를 사용하여 수신 된 요소를 HTTP를 통해 복원 메커니즘으로 큐에 넣습니다. RATE 제한 기는 시간 소비에 기반을두고 병렬 처리를 피하기 때문에 사용할 수 없습니다. – Spawnrider