NodeJS + Azure 서비스 버스 + Windows 서비스

17355 단어 tutorialcloudnodeazure
이 자습서에서는 Azure Service Bus Queue 이벤트에 반응하는 작은 nodejs 서비스를 만드는 방법을 살펴봅니다.

이는 클라우드 + 온프레미스 하이브리드 환경이 있고 온프레미스에서 수행해야 하는 일종의 작업을 조율하려는 상황에서 유용할 수 있습니다.

이것이 유일한 사용 사례는 아니지만 자습서로 유용할 만큼 간단하고 일반적입니다.

Azure에서 Service Bus 리소스를 만드는 방법, 대기열을 구성하는 방법 및 대기열을 사용할 수 있는 작은 nodejs Windows 서비스를 만드는 방법을 알아봅니다.

설정



Azure 구독과 리소스 그룹이 이미 있다고 가정합니다.

그렇지 않은 경우 Azure Free Tier을 사용할 수 있습니다.

리소스 그룹에서 새 리소스를 만듭니다. 이 경우 Service Bus를 검색해야 합니다.



필수 필드를 채우십시오. 저와 기본 가격 책정 계층에 더 가깝기 때문에 서유럽 위치를 선택했습니다.

대기열 또는 둘 다 대신 주제를 사용하려는 경우 주제 및 구독 기능이 기본 계획에서 지원되지 않으므로 최소한 표준 가격 책정 계층을 선택해야 합니다.

이 경우 다른 모든 옵션을 기본값으로 두고 리소스 생성을 계속할 수 있습니다.

대기열 만들기



서비스 버스를 가동하고 실행하면 첫 번째 대기열을 만들 수 있습니다.

새로 만든 Service Bus 리소스의 개요 페이지로 이동하여 "대기열 만들기"를 클릭하기만 하면 됩니다.

채울 옵션이 많지 않습니다. "test-queue"라는 이름을 사용하고 모든 기본값을 그대로 두었습니다.



대기열 이벤트 사용



이제 OS 이벤트 로그에서 Service Bus 큐 이벤트 종료 로그를 수신 대기하는 Windows 서비스로 설치된 작은 nodejs 스크립트를 개발할 수 있습니다.

Windows 서비스를 생성하기 위해 서비스 버스 및 node-windows 패키지와 상호 작용하기 위해 공식 nodejs 라이브러리를 사용할 것입니다.

프로젝트 설정



파일 시스템에 "service-bus-daemon"이라는 새 폴더를 만듭니다.

명령으로 노드 프로젝트 초기화

npm init -y


종속성 설치

npm install @azure/service-bus [email protected].6


우리는 node-windows의 1.0.0-beta.6 버전을 설치할 것입니다. 최신 버전 1.0.0-beta.7이 bug that affect the service start을 작성하는 시점에 있기 때문입니다.

서비스 개발



프로젝트의 루트 폴더에 3개의 파일을 만듭니다.

  • index.js는 비즈니스 논리를 추가할 수 있는 기본 파일입니다
  • .
  • .env에 모든 환경 변수가 포함됨

  • install.js가 시스템에 스크립트를 서비스로 설치합니다
  • .

  • uninstall.js는 이전에 만든 서비스를 제거합니다.

  • // file index.js
    const { ServiceBusClient } = require("@azure/service-bus");
    const EventLogger = require('node-windows').EventLogger;
    require('dotenv').config();
    
    const SERVICE_NAME = process.env.SERVICE_NAME;
    const QUEUE_NAME = process.env.QUEUE_NAME;
    const CONNECTION_STRING = process.env.CONNECTION_STRING;
    
    // log directly in the Windows Event Log
    log = new EventLogger(SERVICE_NAME);
    
    const queueName = QUEUE_NAME
    const sbClient = new ServiceBusClient(CONNECTION_STRING);
    const receiver = sbClient.createReceiver(queueName);
    
    async function main(receiver) {
    
        const myMessageHandler = async (messageReceived) => {
            log.info(`Received message: ${messageReceived.body}`);
        };
    
        // function to handle any errors
        const myErrorHandler = async (error) => {
            log.error(error);
        };
    
        receiver.subscribe({
            processMessage: myMessageHandler,
            processError: myErrorHandler
        });
    } 
    
    async function closeAll(receiver, sbClient) {
        await receiver.close(); 
            await sbClient.close();
        process.exit(0);
    }
    
    main(receiver).catch((err) => {
        log.error(err);
        process.exit(1);
     });
    
    process.on('SIGTERM', () => {
        log.info('Process terminated SIGTERM');
        closeAll(receiver, sbClient);
    });
    
    process.on('SIGINT', () => {
        log.info('Process terminated SIGINT');
        closeAll(receiver, sbClient);
    });
    
    process.on('SIGKILL', () => {
        log.info('Process terminated SIGKILL');
        closeAll(receiver, sbClient);
    });
    



    // file install.js
    require('dotenv').config();
    
    const SERVICE_NAME = process.env.SERVICE_NAME;
    
    var Service = require('node-windows').Service;
    
    // Create a new service object
    var svc = new Service({
      name: SERVICE_NAME,
      description: 'React to service bus queue messages',
      script: require('path').join(__dirname,'index.js'),
    });
    
    // Listen for the "install" event, which indicates the
    // process is available as a service.
    svc.on('install',function(){
        // start the process
      svc.start();
    });
    
    svc.install();
    



    // file uninstall.js
    require('dotenv').config();
    
    const SERVICE_NAME = process.env.SERVICE_NAME;
    
    var Service = require('node-windows').Service;
    
    // Create a new service object
    var svc = new Service({
        name: SERVICE_NAME,
        script: require('path').join(__dirname,'index.js')
    });
    
    // Listen for the "uninstall" event so we know when it's done.
    svc.on('uninstall',function(){
      console.log('Uninstall complete.');
      console.log('The service exists: ',svc.exists);
    });
    
    // Uninstall the service.
    svc.uninstall();
    


    서비스 설치 및 테스트



    서비스를 설치하려면 다음을 실행해야 합니다.

    node install.js
    


    node-windows는 스크립트의 .exe 래퍼를 생성하고 서비스를 생성합니다.

    다음과 같이 저장 탐색기를 사용하여 Azure Portal에서 직접 큐에 메시지를 생성하여 테스트할 수 있습니다.







    서비스를 제거하려면 다음을 실행하면 됩니다.

    node uninstall.js
    


    결론



    이 자습서에서는 노드 js 및 Azure Service Bus를 사용하여 Windows 서비스를 만들기 위한 시작점으로 유용할 수 있는 작은 스크립트를 만들었습니다.

    좋은 웹페이지 즐겨찾기