当前位置: 首页 > 后端技术 > PHP

Swoft2.0.3重大更新,发布优雅的微服务治理

时间:2023-03-29 23:01:39 PHP

什么是Swoft?Swoft是一个基于Swoole扩展的PHP微服务协程框架。Swoft和Go一样,内置了协程Web服务器和常用的协程客户端,并且常驻内存,不依赖于传统的PHP-FPM。有类似Go语言的协程运行方式,类似SpringCloud框架的灵活注解,强大的全局依赖注入容器,完善的服务治理,灵活强大的AOP,标准的PSR规范实现等。通过三年的积累和方向探索,Swoft将Swoft内置到PHP世界的SpringCloud中,是PHP高性能框架和微服务治理的最佳选择。优雅的服务治理Swoft官方推荐开发者使用Servicemesh模型,如Istio/Envoy框架,将业务和服务治理分离。不过Swoft也提供了一套微服务组件供中小企业快速搭建微服务。服务注册与发现服务融合服务限流配置中心服务注册与发现服务注册与发现需要Swoft官方提供的swoft-consul组件,其他第三方类似。注册与取消服务监听SwooleEvent::START事件,注册服务/***ClassRegisterServiceListener**@since2.0**@Listener(event=SwooleEvent::START)*/classRegisterServiceListenerimplementsEventHandlerInterface{/***@Inject()**@varAgent*/private$agent;/***@paramEventInterface$event*/publicfunctionhandle(EventInterface$event):void{/*@varHttpServer$httpServer*/$httpServer=$event->getTarget();$service=[//....];$scheduler=Swoole\Coroutine\Scheduler();$scheduler->add(function()use($service){//注册$this->agent->registerService($service);CLog::info('Swofthttpregisterservicesuccessbyconsul!');});$调度程序->开始();}}监听SwooleEvent::SHUTDOWN事件,取消服务/***ClassDeregisterServiceListener**@since2.0**@Listener(SwooleEvent::SHUTDOWN)*/classDeregisterServiceListener实现EventHandlerInterface{/***@Inject()**@varAgent*/private$agent;/***@paramEventInterface$event*/publicfunctionhandle(EventInterface$event):void{/*@varHttpServer$httpServer*/$httpServer=$event->getTarget();$scheduler=Swoole\Coroutine\Scheduler();$scheduler->add(function()use($httpServer){$this->agent->deregisterService('swoft');});$调度程序->开始();}}服务发现定义服务提供者/***ClassRpcProvider**@since2.0**@Bean()*/classRpcProviderimplementsProviderInterface{/***@Inject()**@varAgent*/private$agent;/***@paramClient$client**@returnarray*@example*[*'host:port'*]*/publicfunctiongetList(Client$client):array{//从consul获取健康服务$services=$吨他的->代理->服务();$服务=[];返回$服务;}}配置服务提供者return['user'=>['class'=>ServiceClient::class,'provider'=>bean(RpcProvider::class)//...]];服务熔断Swoft使用@Breaker注解实现熔断,可以对任意方法进行熔断操作/***ClassBreakerLogic**@since2.0**@Bean()*/classBreakerLogic{/***@Breaker(fallback="funcFallback")**@returnstring*@throwsException*/publicfunctionfunc():string{//做一些事情thrownewException('Breakerexception');}/***@returnstring*/publicfunctionfuncFallback():string{return'funcFallback';}}服务限流Swoft使用@RateLimiter注解实现服务限流,可以在任何方法中进行限流,不仅限于controller,KEY也支持symfony/expression-languageexpressions。/***类LimiterController**@since2.0**@Controller(prefix="limiter")*/classLimiterController{/***@RequestMapping()*@RateLimiter(key="request.getUriPath()",fallback="limiterFallback")**@paramRequest$request**@returnarray*/publicfunctionrequestLimiter(Request$request):array{$uri=$request->getUriPath();返回['requestLimiter',$uri];}/***@paramRequest$request**@returnarray*/publicfunctionlimiterFallback(Request$request):array{$uri=$request->getUriPath();返回['limiterFallback',$uri];}}配置中心配置中心需要使用Swoft官方提供的Swoft-apollo组件,其他第三方类似。声明Agent/***ClassAgentCommand**@since2.0**@Command("agent")*/classAgentCommand{/***@Inject()**@varConfig*/private$config;/***@CommandMapping(name="index")*/publicfunctionindex():void{$namespaces=['application'];while(true){try{$this->config->listen($namespaces,[$this,'updateConfigFile']);}catch(Throwable$e){CLog::error('Configagentfail(%s%s%d)!',$e->getMessage(),$e->getFile(),$e->getLine());}}}/***@paramarray$data**@throwsContainerException*@throwsReflectionException*/publicfunctionupdateConfigFile(array$data):void{foreach($dataas$namespace=>$namespaceData){$configFile=sprintf('@config/%s.php',$namespace);$configKVs=$namespaceData['配置ations']??'';$content='重启();}}}启动AgentAgent只需要在服务(Http/RPC/Websocket)启动前运行即可phpbin/swoft代理:索引更新内容移除(Remove)移除request->json()方法(c9e8f04)增加(Enhancement):增加接口依赖注入(6169f84)增加getFile方法获取文件上传保存后的信息(fe7e3a6)新增restart()服务新增重启方法(2ffec37)新增调用1.xRPC服务支持(30d73c3)新增AOP类名正则表达式匹配支持(bc5e479)新增RPCServer/HttpServer中间文件命名空间使用错误提示(b1cec04)添加验证器排除属性字段unfields(b1bf44f)添加自动写入时间戳(dc58011)添加模型操作事件(dc58011)添加数据库迁移(26bb464)添加实体自动和json和数组转换(dc58011)新模型批量更新方法batchUpdateByIds(dc58011)fix(修复):修复一些设置cookie时的问题,增加一些withCookie相关的方法(b05afbb01)修复当控制台使用协程模式运行命令时,没有捕获处理错误(8a5418bf)修复websocketserverrestart命令没有先停止旧服务器(db2d935)修复任务返回值为null的问题(a69347c)修复RPCServeronly类中间件不能使用的问题()204bc7f修复RPCServer返回值为Null的问题(4d091be)修复Logger的问题和CLog日志级别不能被覆盖和无效(8eb8aba)修复模型中属性不支持自定义表达式(dc58011)更新(Update):Validator优化,支持自定义验证规则(d959a4f)将错误处理管理类ErrorHanlders重命名为ErrorManager(f3a8f04b)控制台组件的异常处理改为错误组件提供的统一处理方式(4f47204)控制台组件允许设置禁用命令组(c5a0269)在默认错误处理中,允许设置错误捕获等级。默认级别是E_ALL|E_STRICT(afff9029)优化ws服务器时开启http处理功能,信息面板增加提示(83a81170)。优化了wsserver和rpcserver同时启动,信息面板不显示rpcserver信息。(额外):添加文档以支持通过google搜索添加apollo组件添加consul组件添加breaker组件添加limter组件资源Gitee:https://gitee.com/swoft/swoftGitHub:https://github.com/swoft-cloud/swoft官网:https://www.swoft.org文档:https://www.swoft.org/docs

最新推荐
猜你喜欢