실시간 2019 관상 바이러스 질병 데이터 흐름에 이벤트 구동 NodeJS 응용 프로그램을 구축하는 방법

우리가 처한 이 전대미문의 시대에 우리 모두는 한자리에 모여 우리의 공동 노력을 이용하여 COVID19의 구조 업무를 대중에게 행복하게 할 것이다.모든 사람은 자신의 전문 지식에 몰입하고 있다.어떤 사람들은 3D 프린터를 통해 개인 보호 장비 제품을 개발하고, 어떤 사람들은 소프트웨어를 개발하며, 다른 사람들은 그들의 가족이나 지역사회에 기술 지원을 제공한다.이 글에서 저는 COVID19 실시간 데이터 업데이트 흐름을 사용하여 NodeJS 이벤트 드라이버를 구축하는 방법을 공유하고 싶습니다. 이 프로그램은 간단한 메시지 전달 프로토콜을 사용하여 대중을 위한 응용 프로그램을 구축할 수 있습니다.
이 프로그램에서, 나는 누구든지 구독할 수 있도록 대중에게 제공하는 다른streams Solace를 사용할 것이다.흐르는 문서를 어떻게 사용하는지는 이githubrepo에서 찾을 수 있습니다.

SolaceLabs 회사 / covid19 흐름 프로세서


JHU 및 CovidTracking을 스트리밍 및 처리하는 예제 응용 프로그램입니다.com 2019 코로나 바이러스 질병 데이터는 Solace에서 흐름으로 제공


연구: 약간의 배경과 요구


이 응용 프로그램을 구축하기 전에, 나는 내가 실현하고자 하는 세 가지 기본 요구를 열거했다.
  • 실시간 데이터 업데이트
  • 경량급 어플리케이션(신규 데이터를 계속 조회하거나 확인하고 싶지 않음)
  • 데이터 변경에 대한 반응
  • 옵션


    더 높은 관점에서 볼 때 나는 두 가지 다른 구조를 선택할 수 있다.
  • 동기식 정지 드라이브 또는
  • EDA(Event Drive Structure) 방법
  • 옵션 1: 휴식


    첫 번째 선택에 있어서 나는 많은 온라인 자원을 이용할 수 있다. 예를 들어 APIs이나 CSV 데이터 집합, 예를 들어 존 호프킨스 대학이 github repo에서 발표한 데이터 집합을 포함한다.비록 이것은 실행 가능한 선택이지만, 많은 온라인 샘플과 자원이 있지만, 나는 좀 더 실시간적인 것을 원한다
    a) 데이터가 처음 발표될 때 가장 가치가 있다(아래 그림 1 참조).
    b) 끊임없이 업데이트를 문의하는 것이 아니라 데이터 업데이트에 반응하는 프로그램을 원합니다.예를 들어, JHU github repo의 CSV 파일은 매일 한두 번씩 업데이트됩니다.만약 내가 이 데이터베이스를 사용한다면, 나는 반드시 끊임없이 그것을 윤문하고 업데이트를 검사해야 한다.
    그림1: 데이터의 가치는 시간의 흐름에 따라 감소한다
    그 밖에 나는 대형 데이터 집합을 처리할 것이기 때문에 변경이 발생할 때 새로운 업데이트 데이터에 반응하기를 바랄 뿐이다.그래서 REST 방법은 경량급의 실현이 아니다.이것은 요구1과 2를 부정했다.

    옵션 2: EDA


    이벤트 드라이브 구조를 통해 저는 게시-구독 모드 방법을 사용하여 응용 프로그램을 구축할 수 있습니다.술집이 뭐냐고 물어볼지도 몰라요.요컨대, 이는 데이터를 보유한'발표자'(예를 들어 2019 관상 바이러스 질병 데이터 원본)와 이 데이터를 보유한'구독자'(예를 들어 나의 NodeJs 응용 프로그램)로 귀결되어 새로운 데이터를 발표할 때만 반응할 수 있다.
    SolacePubSub+ COVID-19 Broker가 대중에게 개방됨에 따라 2019 관상바이러스 질병 데이터의 업데이트는 서로 다른 데이터 흐름에 발표되었다.따라서 이벤트 드라이브 응용 프로그램(IoT, 모바일/웹 응용 프로그램)을 개발하고자 하는 응용 프로그램 개발자는 사용 가능한 테마를 구독하여 데이터 흐름을 소모할 수 있다.이 데이터의 사용은 프레임워크/플랫폼/언어와 무관하기 때문에 저는 이 프로토콜을 지원하는 모든 메시지 전달 프로토콜(MQTT, AMQP, JMS) 또는 오픈 API(Python, JS, NodeJS...)를 사용할 수 있습니다.나도 쉴 수 있어!
    그림 2: 하이엔드-엔드 아키텍처 개요

    결정


    따라서 상기 두 가지 옵션을 평가한 후에 나는 EDA 방법으로 나의 응용 프로그램을 구축하기로 결정했다.또한 경량급 메시지 전달 API를 사용하여 실시간 2019 관상바이러스 질병 업데이트를 얻고 이 업데이트에 반응하고 싶어서 EDA가 이긴 것이 분명하다.

    우리 본론을 이야기합시다.응, 인코딩 말이야.



    Solace PubSub+broker에서 지원하는 언어 및 프로토콜을 기반으로 MQTT를 사용하기로 결정했습니다. 여기에 사용할 기본 NodeJS API가 있기 때문입니다.
    그림 3: Solace 지원 언어 및 프로토콜

    1. 초기 설정


    NodeJS 프로젝트를 시작합니다.새 터미널을 열고 다음 명령을 실행하십시오. 이 명령은 프로젝트에 새 디렉터리를 만들고 초기화하고 mqtt 패키지를 설치합니다.
    
    mkdir covidproject && cd "$_" && npm init -y && npm i mqtt 
    
    

    2. 매니저에게 연결


    새 파일 만들기
    
    touch index.js 
    
    
    그리고 당신이 가장 좋아하는 텍스트 편집기에서 그것을 엽니다.다음 항목 삽입
    
    var mqtt = require('mqtt') 
    
    var host = "tcp://mr2r9za6fwi0wf.messaging.solace.cloud:1883" 
    
    var config = { 
    
        username: "covid-public-client", 
    
        password: "covid19", 
    
    } 
    
    var client  = mqtt.connect(host, config) 
    
    client.on('connect', () => { 
    
        console.log("Connected to COVID PubSub+ Broker!") 
    
    }) 
    
    
    위의 작업은 mqtt 클라이언트를 초기화하고 호스트와 설정 변수를 사용하여 프록시 URL에 연결하는 것입니다.그리고 mqtt 대상은 클라이언트 응용 프로그램이 리셋 행위에 사용할 수 있는 신호를 되돌려줍니다. 이 예에서 이것은 우리가 정탐하고 있는'연결'신호 client.on(‘connect’) 입니다.잠시 후에 우리는 더 많은 신호를 소개할 것이다.
    참고: 프록시 URL 및 자격 증명은 여기에서 제공됩니다https://github.com/SolaceLabs/covid19-stream-processors#1-connection-information.
    이제 터미널에서 다음 동작을 실행하여 연결을 테스트합니다
    
    node index.js 
    
    
    Connected to COVID PubSub+ Broker! 출력을 보셔야 합니다.봐라!

    3. 주제 구독


    현재 에이전트에 연결되어 있습니다. 테마만 구독하면 됩니다.
    
    var topics = [ 
    
        "jhu/csse/covid19/raw", 
    
    ] 
    
    client.on('connect', () => { 
    
        console.log("Connected to COVID PubSub+ Broker!") 
    
        topics.forEach( (topic) => { 
    
            console.log("Subscribing to topic: ", topic) 
    
            client.subscribe(topic) 
    
        }) 
    
    }) 
    
    
    
    

    4. 전화를 듣다


    우리가 듣고 싶은 두 번째 신호는 다음과 같다.
    
    client.on('message', (topic, message) => { 
    
        console.log("Received message on Topic: ", topic,"\nMessage:\n", JSON.parse(message.toString()))
    
    }) 
    
    
    
    
    프록시에서 받은 메시지는 바이너리 형식입니다.이를 인간이 읽을 수 있는 형식으로 바꾸기 위해 우리는 message 를 사용하고 이를 JSON 해석한다.메시지는 Repo에서 정의한 schemas 를 기반으로 JSON 형식으로 전송됩니다.
    최종 응용 프로그램은 다음과 같습니다.
    
    var mqtt = require('mqtt') 
    
    
    
    var host = "tcp://mr2r9za6fwi0wf.messaging.solace.cloud:1883" 
    
    var config = { 
    
        username: "covid-public-client", 
    
        password: "covid19", 
    
    } 
    
    
    
    var topics = [ 
    
       "jhu/csse/covid19/raw", 
    
    ] 
    
    
    
    var client  = mqtt.connect(host, config) 
    
    
    
    client.on('connect', () => { 
    
        console.log("Connected to COVID PubSub+ Broker!") 
    
        topics.forEach( (topic) => { 
    
            console.log("Subscribing to topic: ", topic) 
    
            client.subscribe(topic) 
    
        }) 
    
    }) 
    
    
    
    client.on('message', (topic, message) => { 
    
        console.log("Received message on Topic: ", topic,"\nMessage:\n", JSON.parse(message.toString()))
    
    }) 
    
    
    우리 끝났어!응용 프로그램이 현재 에이전트에 연결되어 있으며, 구독 진열에 정의된 하나 이상의 테마가 있으며, 새로운 메시지를 발표할 때만 반응합니다.

    샘플 실행


    나는 이미 나의 응용 프로그램을 수정하여 message.toString() 흐르는 아래의 주제를 이용하여 캐나다 안대략성의 모든 병례 갱신(사망, 활동, 확인과 회복), 요르단의 회복 병례와 영국의 모든 성의 확인 병례를 구독하였다
    var topics = [
        "jhu/csse/covid19/test/cases/+/update/Canada/Ontario/#",
        "jhu/csse/covid19/test/cases/recovered/update/Jordan/#",
        "jhu/csse/covid19/test/cases/confirmed/update/United Kingdom/#"
    ]
    
    주제 수준 매칭과 다중 레벨 매칭에는 MQTT 와일드카드("+"와 "#")가 각각 사용됩니다.


    샘플 흐름 뷰어 https://www.marcd.dev/COVIDStreamViewer/mqtt/mqttListener.html 를 체크 아웃하고 test 테마를 구독할 수 있습니다.

    다음 단계


    topic hierarchy를 볼 때 서로 다른 테마를 구독하고 mqtt wildcards 클라이언트 응용 프로그램에서 이벤트 흐름을 사용하는 방식을 사용자 정의할 수 있습니다.
    당신의 생각을 보게 되어 기쁩니다. 그러니 마음대로 공유하고 요청을 작성해 주세요SolaceLabs github repo!문제가 있으면 아래의 설명 섹션에 남겨 주십시오.본고에서 같은 방법으로Python 응용 프로그램을 구축하려는 시도를 마음대로 보십시오!

    좋은 웹페이지 즐겨찾기