Hangfire.NET Core 3.1로 시작하기
13571 단어 dotnetcore대열Hangfire.io작업 스케줄러dotnet
나는 웹 응용 프로그램을 만들 때 어쨌든 문제가 발생하는 것은 응답이라고 생각한다.
시스템을 만들 때 웹 화면에서 시간을 들여 처리했는데 정보 처리로서 어떻게 하시겠습니까?
만약 30초라면 아마도 사용자는 기다릴 수 있을 것이다
처리하는 데 5시간이 걸리면 어떡하지??
그곳에서 효과적인 생각은 정보 대기열의 구조를 사용했다는 것이다.
AP 서버가 대기열에 "이거 한다고 말해줘요".
대기열 내용을 주문하는 일꾼들이 순서대로 진행하는 구조입니다.
이럴 때 사용하기 쉬운 Hangfire 프레임?라이브러리소개할게요.
빨리 결론을 주세요.
이번 보도에 실린 절차를 거쳐 아래의 창고를 만들 수 있다.
컨디션
이 글의 내용을 시험해 보는 환경은
Hangfire란 무엇입니까?
는 작업을 대기열/실행할 수 있는 프레임워크입니다.
rabbitMQ
또는 ActiveMQ
등의 메시지 대기열 시스템을 사용하는 소프트웨어마찬가지로 실현할 수 있지만
Hangfire
는 다음과 같은 장점이 있다..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
실행부팅
client
과 server
상태에서 실행app
.여러 개
server
를 시행해 보면 분산 집행 상황을 확인할 수 있다.계기판은 이런 느낌이에요.
임무 기록도 이렇게 참고할 수 있다.
끝맺다
Hangfire
직원에 대한 줄 서기 집행의 틀을 소개했다.이렇게 분산 운행하면 계기판으로 관리하기에 매우 편리하다.
이번에는 콘스토어입니다.그냥 Write Line 같은 간단한 작업 수행.
유니버설 라이브러리에서 클래스를 정의함으로써 더욱 복잡한 처리를 할 수 있습니다.
한편, 이번에는'계기판','스태프','임무의 줄 서기 집행'세 가지 구성으로 실시되었다
또한 대시보드 응용 프로그램에 컨트롤러를 설치하여 API를 통해 대기열을 지정할 수 있습니다.
Reference
이 문제에 관하여(Hangfire.NET Core 3.1로 시작하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/yoh1496/items/98154b6596b2c8cccf04텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)