Hangfire.NET Core 3.1로 시작하기

개시하다
나는 웹 응용 프로그램을 만들 때 어쨌든 문제가 발생하는 것은 응답이라고 생각한다.
시스템을 만들 때 웹 화면에서 시간을 들여 처리했는데 정보 처리로서 어떻게 하시겠습니까?
만약 30초라면 아마도 사용자는 기다릴 수 있을 것이다
처리하는 데 5시간이 걸리면 어떡하지??
그곳에서 효과적인 생각은 정보 대기열의 구조를 사용했다는 것이다.
AP 서버가 대기열에 "이거 한다고 말해줘요".
대기열 내용을 주문하는 일꾼들이 순서대로 진행하는 구조입니다.
이럴 때 사용하기 쉬운 Hangfire 프레임?라이브러리소개할게요.
빨리 결론을 주세요.
이번 보도에 실린 절차를 거쳐 아래의 창고를 만들 수 있다.
컨디션
이 글의 내용을 시험해 보는 환경은
  • OS: Windows 10
  • RAM: 8GB
  • 네.
    Hangfire란 무엇입니까?
    는 작업을 대기열/실행할 수 있는 프레임워크입니다.rabbitMQ 또는 ActiveMQ 등의 메시지 대기열 시스템을 사용하는 소프트웨어
    마찬가지로 실현할 수 있지만 Hangfire는 다음과 같은 장점이 있다.
  • .NET(NuGet)의 큰 은혜
  • 를 받을 수 있습니다.
  • 계기판까지 준비한 매끄러운 경매
  • 그런데 너무 작아서 찾아봐도 일본어로 쓴 해설이 적어 어려운 점이죠.
    .NET Core(OSS 버전.NET Framework)가 공개되면서 문턱이 내려갔어요.
    마이크로소프트의 오픈 소스 버전.NET Framework가 공개된 곳.NET Core.
    행파이어는NET Core도 지원해 문턱이 크게 낮아졌다.하지만 여전히 소수다.
    업데이트도 됐나요?
    나는 4년 전쯤부터 Hangfire를 사용하기 시작했지만 개발은 계속되고 있다.
    바로 시작하기
    dotnet sdk 설치
    다음 링크에서dotnet sdk3.1을 다운로드/설치하십시오.
    https://dotnet.microsoft.com/download
    설치가 완료되면 다음dotnet 명령을 사용할 수 있습니다.
    $ dotnet --version
    3.1.100
    
    프로젝트 디렉토리 만들기
    이번에 client 프로젝트랑 server 프로젝트를 하고 싶어요.
    여러 가지 총괄적인 해결 방안을 만들다.
    $ dotnet new sln -o hangfire-dotnet3
    The template "Solution File" was created successfully.
    
    $ cd hangfire-dotnet3 # ソリューションのディレクトリに移動
    
    $ ls
    hangfire-dotnet3.sln
    
    항목별 추가
    방금 작성한 솔루션에 대한 추가 프로젝트client
    $ dotnet new webapp -o client
    The template "ASP.NET Core Web App" was created successfully.
    This template contains technologies from parties other than Microsoft, see https://aka.ms/aspnetcore/3.1-third-party-notices for details.
    f
    Processing post-creation actions...
    Running 'dotnet restore' on client\client.csproj...
      C:\dev\hangfire-dotnet3\client\client.csproj の復元が 165.82 ms で完了しました。
    
    Restore succeeded.
    
    $ dotnet sln add client # プロジェクトの追加
    プロジェクト `client\client.csproj` をソリューションに追加しました。
    
    동일server 항목 추가
    $ dotnet new console -o server
    
    $ dotnet sln add server
    
    상기 절차에서client, 서버 폴더에 각각 템플릿이 펼쳐졌습니다.
    ※ 주의
    Hangfire는 작업 대기열을 지정하는 UI를 제공하는 웹 서버/AP 서버를 client라고 합니다.
    한편, 줄을 서는 작업을 기다리며 순서대로 수행하는 직원을 server라고 부른다.
    자주 헷갈리지 않도록 주의해라!
    JobStorage 준비
    대기열로 사용할 수 있는 물품은 아래 페이지의 Storage 구역에 있습니다.
    이번에는 몬godb를 사용하고 싶습니다.
    docker run -d -p 27017:27017 mongo:4.0-xenial
    
    끝.
    (docker를 사용할 수 없을 때는 https://www.mongodb.com/download-center/community?jmp=docs부터 설치하는 것이 좋습니다.)
    서버 설치
    필수 패키지 설치
    $ cd server
    $ dotnet add package Hangfire.Core -v 1.7.8
    $ dotnet add package Hangfire.Mongo -v 0.6.5
    
    그런 다음 server/server.csproj 파일과 관련된 패키지가 추가됩니다.server/Program.cs에서 다음과 같이 방금 Docker의 중립적인 mongo를 참조하도록 설정합니다.
    using System;
    using Hangfire;
    using Hangfire.Mongo;
    
    namespace server {
        class Program {
            static void Main(string[] args) {
                GlobalConfiguration.Configuration
                    .UseMongoStorage("mongodb://localhost", "ApplicationDatabase");
                using(var server = new BackgroundJobServer()) {
                    Console.WriteLine("Started BackgroundJobServer. Press Enter to exit.");
                    Console.ReadLine();
                }
            }
        }
    }
    
    서버가 이렇게 완성되었습니다.
    $ dotnet run .
    
    명령은 다음과 같은 내용을 표시하면 된다.

    실현 센터
    필요한 패키지도 클라이언트에 설치합니다.
    $ cd client 
    $ dotnet add package Hangfire -v 1.7.8
    $ dotnet add package Hangfire.AspNetCore -v 1.7.8
    $ dotnet add package Hangfire.Mongo -v 0.6.5
    
    그리고 편집client/StartUp.cs.
            public void ConfigureServices(IServiceCollection services) {
                services.AddRazorPages();
    
                services.AddHangfire(config => {
                    string connectionString = "mongodb://localhost";   # 本来は環境変数で指定する
                    string databaseName = "ApplicationDatabase";   # 本来は環境変数で指定する
                    var storageOptions = new MongoStorageOptions {
                        MigrationOptions = new MongoMigrationOptions {
                        Strategy = MongoMigrationStrategy.Drop,
                        },
                    };
                    config.UseMongoStorage(connectionString, databaseName, storageOptions);
                });
            }
    
    원래 연결 문자열은 환경 변수로 지정할 수 있는 것으로 변경해야 한다고 생각했는데
    우선 샘플이라 대충 적었습니다.
    다음 명령으로 시작합니다 Client.
    $ cd client
    $ dotnet run .
    
    브라우저http://localhost:5000/hangfire에 액세스하면 다음과 같은 대시보드가 열립니다.

    Producter 설치
    상기 절차에 따라 임무 관리와 집행을 완성한 기구.
    다음은 실제 작업에 대해 줄을 서는 프로그램을 만듭니다.
    $ dotnet new console -o app
    
    $ cd app
    $ dotnet add package Hangfire.Core -v 1.7.8
    $ dotnet add package Hangfire.Mongo -v 0.6.5
    
    app/Program.cs 파일 편집
    using System;
    using System.Threading;
    using Hangfire;
    using Hangfire.Mongo;
    
    namespace app {
        class Program {
            static void Main(string[] args) {
                GlobalConfiguration.Configuration
                    .UseMongoStorage("mongodb://localhost", "ApplicationDatabase");
    
                int Cnt = 10;
                for (int i = 0; i < Cnt; i++) {
                    BackgroundJob.Enqueue(() => Console.WriteLine($"task #{i}"));
                    Console.WriteLine($"Enqueued task#{i}");
                }
            }
        }
    }
    
    간단하게 for 문장으로 10개의 임무를 줄을 서세요.
    $ dotnet run .
    Enqueued task#0
    Enqueued task#1
    Enqueued task#2
    Enqueued task#3
    Enqueued task#4
    Enqueued task#5
    Enqueued task#6
    Enqueued task#7
    Enqueued task#8
    Enqueued task#9
    
    실행
    부팅clientserver 상태에서 실행app.
    여러 개server를 시행해 보면 분산 집행 상황을 확인할 수 있다.

    계기판은 이런 느낌이에요.

    임무 기록도 이렇게 참고할 수 있다.


    끝맺다Hangfire 직원에 대한 줄 서기 집행의 틀을 소개했다.
    이렇게 분산 운행하면 계기판으로 관리하기에 매우 편리하다.
    이번에는 콘스토어입니다.그냥 Write Line 같은 간단한 작업 수행.
    유니버설 라이브러리에서 클래스를 정의함으로써 더욱 복잡한 처리를 할 수 있습니다.
    한편, 이번에는'계기판','스태프','임무의 줄 서기 집행'세 가지 구성으로 실시되었다
    또한 대시보드 응용 프로그램에 컨트롤러를 설치하여 API를 통해 대기열을 지정할 수 있습니다.

    좋은 웹페이지 즐겨찾기