간략한 소개
연구 개발의 2 년 급증, 마이크로 서비스 엔진은 약간 사랑도, 당신의 호의를 프로토 타입했다, GitHub의 거의 2800 별, 포크 (811)를 수확에, 가입자가 더 다스 회사보다는뿐만 아니라 컨설팅 및 교육으로있다,
2020 년, 우리는 커뮤니티 버전을 개선하기 위해, 지역 사회의 힘에 의존하지만, 우리는 사회가 급증 구축하기 위해 함께 작업 할 수 있습니다 좋은 유료 고객을 유지하기 위해 더 많은 에너지를 보낼 것입니다, 새해, 모두가 가입 할 수 있습니다 것 십일이있다 유일한 공식 급증 인구 : 615 562 965, 새해 봉투 빨간색 평소와 같이 발행뿐만 아니라, 오의 많은됩니다. 새해 카니발을 함께합시다.
자신의 공식 방송국을해야합니다 급증, 저자가 VuePress으로 개발되고있다, 우리는 가까운 일에 당신을 만날 것입니다
새로운 기능 설명
1.GRPC 프로토콜 지원 :
인터페이스를 추가, 기본값은 설정 ServerCallContext 매개 변수가 null입니다. 다음과 같이 코드입니다 :
사용 인사하는 단계; 사용 Grpc.Core 단계; 사용 Surging.Core.CPlatform.Ioc 단계; 사용 Surging.Core.CPlatform.Runtime.Server.Implementation.ServiceDiscovery.Attributes 단계; 사용 System.Threading.Tasks 단계; 공간 Surging.IModuleServices.Common { [ServiceBundle ( " API / 서비스 {} / {} 방법 " )] 공중 인터페이스 IGreeterService : IServiceKey { 작업 <HelloReply>의 sayHello (HelloRequest 요청 ServerCallContext 컨텍스트 = 널 ); } }
GreeterBehavior, 다음 코드를 추가합니다
인사를 사용함; Surging.Core.CPlatform.Ioc을 사용함; 네임 스페이스 Surging.Modules.Common.GreeterServices { 공용 부분 클래스 GreeterBehavior : Greeter.GreeterBase, IServiceBehavior { } }
비즈니스 코드를 추가하여 다음과 같이 코드입니다 :
사용 인사하는 단계; 사용 Grpc.Core 단계; 사용 Surging.IModuleServices.Common 단계; 사용 Surging.Modules.Common.GreeterServices 단계; 사용 System.Threading.Tasks 단계; 네임 스페이스 Surging.Modules.Common.Domain { 공공 클래스 GreeterService : GreeterBehavior, IGreeterService { 공공 재정의 작업 <HelloReply> 의 sayHello (HelloRequest 요청, ServerCallContext 컨텍스트) { 반환 Task.FromResult ( 새 HelloReply { 메시지 = " 안녕하세요 "+ request.Name }); } } }
다음과 같이 GRPC 클라이언트 호출 코드는
사용 인사하는 단계; 사용 Grpc.Core 단계; 사용하여 시스템; 네임 스페이스 GrpcService1 { 공공 클래스 프로그램 { 공공 정적 무효 메인 ( 문자열 []에 args) { var에 채널 = 새로운 채널 ( " 127.0.0.1 " , 95 , ChannelCredentials.Insecure); var에 클라이언트 = 새로운 Greeter.GreeterClient (채널); var에 결과 = client.SayHello ( 새 HelloRequest { 이름= " fanly " }); Console.WriteLine ( " grpc 클라이언트 전화의 sayHello () : " + 결과); Console.ReadKey (); } } }
2. 지원 WorkService 배경 데몬 호스팅
WorkService 엔진 지원은 백 오피스 서비스는 추가 태스킹, 같은 다음, 열거 나 닫거나 원격 RPC 호출을 지원할 수 :
다음과 같이 인터페이스 코드를 추가합니다 :
[ServiceBundle ( " 배경 / 서비스 {} " )] 공중 인터페이스 IWorkService : IServiceKey { 작업 < BOOL > AddWork (메시지의 메시지); 작업 StartAsync (); 작업 StopAsync (); }
그럼 당신은 상속 할 필요가 BackgroundServiceBehavior을 , 서비스 수명주기가 설정되어 ISingleInstance
공공 클래스 WorkService : BackgroundServiceBehavior, IWorkService, ISingleInstance { 개인 읽기 전용 ILogger입니다 <WorkService> _logger; 전용 판독 전용 큐 <메시지> = _queue 새로운 큐 <메시지> (); 개인 읽기 전용 IServiceProxyProvider _serviceProxyProvider; 개인 CancellationToken의 _token; 공개 WorkService (ILogger입니다 <WorkService> 로거 IServiceProxyProvider serviceProxyProvider) { _logger = 로거; _serviceProxyProvider =serviceProxyProvider; } 공용 작업 < BOOL > AddWork (메시지 메시지) { _queue.Enqueue (메시지); 반환 Task.FromResult ( 사실을 ); } 보호 재정을 비동기 작업 ExecuteAsync (CancellationToken stoppingToken) { 시도 { _token = stoppingToken; _logger.LogInformation ( " 노동자 실행에서 {시간} " , DateTimeOffset.Now); _queue.TryDequeue ( 아웃메시지 메시지); 경우 (메시지! = null의 ) { VAR의 결과 = AWAIT _serviceProxyProvider.Invoke < 오브젝트 > (message.Parameters, message.RoutePath, message.ServiceKey); _logger.LogInformation ( " 호출 서비스에서 {시간}, 호출 결과 : {결과} " , DateTimeOffset.Now, 결과); } 경우 (! _token.IsCancellationRequested) AWAIT Task.Delay ( 1000 , stoppingToken); } 캐치 (예외 예) { (_logger.LogError를" 오류 메시지 실행 WorkService : {메시지}, 추적 정보 : {추적을} " , ex.Message, ex.StackTrace); } } 공개 비동기 태스크 StartAsync () { 경우 (_token.IsCancellationRequested) { AWAIT 베이스 .StartAsync (_token); } } 공공 비동기 작업 StopAsync () { 경우 (! _token.IsCancellationRequested) { await를 기본 .StopAsync (_token); } } }
3. 지원 특성 검증
지원 검증 인터페이스 특성으로 다음과
[ServiceBundle ( " API / 서비스 {} / {} 방법 " )] // [ServiceBundle ( "API / 서비스 {}")] // [ServiceBundle ( "API / 서비스 {} / {수단} / 검사")] // [ServiceBundle ( "API / 서비스 {} / {수단} / 검사"거짓)] 공중 인터페이스 IUserService : IServiceKey { /// <요약> /// 获取用户姓名 /// </ 요약> /// <매개 변수 이름 = "ID"> 用户编号</ PARAM> /// <리턴> </ 반환> [ServiceRoute ( " {ID} ")] 작업 < 문자열> 때 getUserName ([검증] [범위 ( 1 , 10 , ErrorMessage가 = " 只能为1到10 ' )] 의 INT ID); /// <요약> /// 获取用户 /// </ 요약> /// <PARAM NAME = "사용자"> 用户模型</ PARAM> /// <리턴> </ 반품> [명령 (전략 = StrategyType.Injection는, 사출 =는 @ " 돌아가 새로운 Surging.IModuleServices.Common.Models.UserModel { "fanly "이름 =" " 나이 = 19 }; " ,, InjectionNamespaces = 새로운 캐릭터 [{ " Surging.IModuleServices.Common " })] [InterceptMethod (CachingMethod.Get, 키 = " GetUser_id_ {0} " , CacheSectionType = SectionType.ddlCache, MODE = CacheTargetType.Redis, 시간 = 480 ) ] [검증] 작업 <UserModel> 인 getUser (UserModel 사용자); }
지원 특성 모델 검증, 추가 인터페이스 방법은 다음, [유효성 검사] 등록해야한다, 그렇지 않으면 확인할 수 없습니다
[ProtoContract] 공용 클래스 UserModel { [ProtoMember ( 1이다. )] [CacheKey ( 1. )] 공중 INT 사용자 아이디 { GET , SET } [ProtoMember ( 2 )] 공중 문자열 이름 { GET , SET } [ProtoMember ( 3. )] [ 레인지 ( 0 , 150 의 ErrorMessage가 = " 나이는 0 ~ 150 사이 살 수 있습니다 " )] 공공 INT{연령 GET , SET ;} [(ProtoMember . 4 )] [레인지 ( 0 , 1. 의 ErrorMessage가 = " 성별 남성 또는 유일한 선택 여성 캔 " )] 공공 섹스 섹스 { GET , SET ;} }
개요
오픈 소스는 쉬운 일이 아닙니다, 제발 지원