首页 文章 精选 留言 我的

精选列表

搜索[企业级],共10000篇文章
优秀的个人博客,低调大师

| 企业级的渐进式 PHP 协程框架

Hyperf 2.2 版本发布! 前言 首先感谢所有 Hyperf 的支持者,从发布至今两年的时间里,我们坚持每周发布一个小版本,截止至今已经发布了超过 106 个版本,这是 Hyperf 团队传达对用户坚持和负责任精神最直接的一种方式,我们用行动来说明一切,往后我们仍将一如既往地继续保持 Hyperf 的迭代与维护。 同时我们也很荣幸看到越来越多的公司选择了 Hyperf 作为公司项目的框架来使用,并反哺了很多的 Pull Request 和 Bugfixs 给 Hyperf,当前 Hyperf 的 Contributors 已超 200 人,感谢大家一起共造了生态的繁荣,我们必定不负众望! Thanks ALL 在持续迭代的过程中,我们又产生了一些新的思路。我们对这些思路进行迭代、验证,并最终沉淀到了 2.2 版本中,今天很荣幸向大家公布,Hyperf 2.2 版本发布! 主要功能迭代 DI 底层实现重构 在 2.0-2.1 版本时,为了实现 AOP 作用于非 DI 管理的对象(如 new 关键词实例化的对象时),底层实现采用了BetterReflection 组件来实现相关功能,带来新的编程体验的同时,也还是存在一些此前未攻克的问题,如下: 无扫描缓存时项目启动很慢 特殊场景下 Inject 和 Value 不生效 BetterReflection尚未支持 PHP 8 (截止发版时) 在新的版本里,我们弃用了 BetterReflection 的应用,采用了 子进程扫描的方式 来解决此前的问题,以上这些痛点,我们全部解决了~ 用正向的角度来描述这个功能的变更: 无缓存下,启动时间缩减一个数量级,以笔者所在公司的某个巨型项目为例,原启动时间长达 5分钟,新版本只需 10秒! 丰富了 Inject 注解注入的适用场景,但可惜仍有一种情况下无效(父类 private 属性注入时失效,与此前版本表现一致),我们会继续努力攻克该场景的实现 支持 PHP 8 及 Attributes 原生注解特性 简而言之,DI 组件作为 Hyperf 的核心组件之一,现在已经达到了一个全新的阶段,创新与实用值满格~ 支持 PHP 8 Hyperf 2.2 各组件已经适配 PHP 8,注解亦兼容 PHP 8 的 Attributes 原生注解特性。 <?php namespace App\Controller; #[Controller] class IndexController { #[GetMapping("/test")] public function index() { ... } } 需要注意的是,同一区域同时使用 注解(Annotations) 和 原生注解(Attributes),底层将 忽略注解(Annotations) (即使注解不同) <?php namespace App\Controller; /** * @Controller * 同一区域同时使用,注解(Annotations) 无效 */ #[Middleware(TestMiddleware::class)] class IndexController { // 单独使用,可以支持 #[Inject] protected StdoutLoggerInterface $logger; /** * 单独使用,可以支持 * @GetMapping("/test") */ public function index() { ... } } 需要注意的是,框架虽然已经支持 PHP8,但是升级时仍需要自行确认业务代码和依赖的第三方组件是否满足 PHP 8 不兼容变更 。 可重复注解 在之前版本中,同一区域相同Annotation 无法重复使用: /** * @AutoController() * @Middleware(FooMiddleware::class) * @Middleware(BarMiddleware::class) * 重复 @Middleware 只有一个生效! */ class IndexController { } 此前,重复使用相同注解只能通过注解嵌套方式实现: /** * @AutoController() * @Middlewares({ * @Middleware(FooMiddleware::class) * @Middleware(BarMiddleware::class) * }) * 非常繁琐,增加额外心智负担 */ class IndexController { } 在 2.2 中,我们实现了可重复注解: <?php namespace App\Controller; #[AutoController] #[Middleware(FooMiddleware::class)] #[Middleware(BarMiddleware::class)] class IndexController { } 当用户自定义的注解需要可重复时,将注解的父类更改为 Hyperf\Di\Annotation\AbstractMultipleAnnotation 即可,具体可参考框架 Middleware 注解的实现。 配置中心完全重构 在此前的版本,配置中心的实现是由各个零散的组件自行实现的,各组件的实现参差不一,都有一些细节实现的区别,各组件间的代码重合度也是非常高的,在 2.2 版本,我们 完全重构 了相关组件,增加了 hyperf/config-center 组件,该组件将作为配置中心的统一接入层和抽象层,通过结合其他配置中心的 Driver 组件来实现相关储存引擎的能力驱动,如 hyperf/config-center + hyperf/config-apollo 组件结合使用的方式来实现对 Apollo 配置中心的使用,其他驱动只需更换对应的驱动即可。这样的改造使我们极大的减少了驱动的代码量,现在简单几行代码几个类就能完成一个新的驱动的接入了。 在升级使用时,注意相关配置文件的变更,新版本将由 config/autoload/config_center.php 配置文件来管控所有相关信息,初次创建该文件可通过运行 php bin/hyperf.php vendor:publish hyperf/config-center 命令生成。 服务治理组件重构 在此前的版本,hyperf/service-governance 组件跟配置中心所面临的问题也是一致的,我们在此版本也做了与配置中心类似的改变,比如通过 hyperf/service-governance + hyperf/service-governance-nacos 组件来实现 nacos 作为服务中心的使用。 在升级使用时,注意相关配置文件的变更,新版本将由 config/autoload/services.php 配置文件来管控所有相关信息,内部结构有一定的改变,初次创建该文件可通过运行 php bin/hyperf.php vendor:publish hyperf/service-governance 命令生成。 Nacos 组件完全重构 重要:一定要重读该组件文档!!! 我们对 Nacos 组件做了 完全的重构,使该组件的代码实现、结构分层和 API 更加的合理,并对原来整合在一个组件内的配置中心逻辑、服务中心逻辑和客户端代码进行了拆分,如上面两个主要迭代功能介绍所示。 具体使用到 Nacos 组件的一定要重新阅读新的文档,并根据新的文档指示来使用。 AMQP 组件连接机制重构 我们发现使用 AMQP 组件的用户非常的多,而作为一个消息队列组件,其性能速度对系统的削峰效果和消息投递/消费速度影响是非常大的,我们通过 协程通道(Channel) 实现了一个多路复用的机制,使该组件的消息投递性能提升了将近一倍!在性能提升的同时,还使得客户端与服务端间的连接稳定性得到了提升。 该组件升级后会直接切换为新的连接机制,无需做任何调整。 以下是抽取压测对比中的关键信息: 非 Confirm 模式投递 2.1 版本 连接池内最大数量设置为 10 $ ab -c 32 -n 10000 http://127.0.0.1:9501/ Requests per second: 5340.80 [#/sec] (mean) Time per request: 5.992 [ms] (mean) Time per request: 0.187 [ms] (mean, across all concurrent requests) Transfer rate: 928.38 [Kbytes/sec] received 2.2 版本 设置 2 个多路复用的连接 $ ab -c 32 -n 10000 -k http://127.0.0.1:9501/ Requests per second: 9101.44 [#/sec] (mean) Time per request: 3.516 [ms] (mean) Time per request: 0.110 [ms] (mean, across all concurrent requests) Transfer rate: 1626.53 [Kbytes/sec] received Confirm 模式投递 2.1 版本 连接池内最大数量设置为 10 $ ab -c 32 -n 5000 -k http://127.0.0.1:9501/ Requests per second: 797.73 [#/sec] (mean) Time per request: 40.114 [ms] (mean) Time per request: 1.254 [ms] (mean, across all concurrent requests) Transfer rate: 142.56 [Kbytes/sec] received 2.2 版本 设置 2 个多路复用的连接 $ ab -c 32 -n 5000 -k http://127.0.0.1:9501/ Requests per second: 1595.94 [#/sec] (mean) Time per request: 20.051 [ms] (mean) Time per request: 0.627 [ms] (mean, across all concurrent requests) Transfer rate: 285.21 [Kbytes/sec] received 3 个 Incubator 组件毕业进入主库 自从采用 Incubator 机制来孵化组件后,产生了大量的新组件,很荣幸在 2.2 版本时,有 3 个 Incubator 组件毕业进入主库,这也意味着这些组件进入了生产可用阶段~ 以下为各个毕业的组件及其简介 hyperf/dag 该组件是一个轻量级有向无环图 (Directed Acyclic Graph) 任务编排库,通过该组件可以很轻松的完成任务的编排和运行。 hyperf/rpc-multiplex 该组件是一个实现多路复用的 RPC 协议连接组件,通过使用该库可以得到性能更高和连接更稳定的 RPC 功能; hyperf/rpn 该组件是一个 逆波兰表示法 的实现组件,RPN 是一种是由波兰数学家扬·武卡谢维奇1920年引入的数学表达式方式,在逆波兰记法中,所有操作符置于操作数的后面,因此也被称为后缀表示法。逆波兰记法不需要括号来标识操作符的优先级。通过该组件可以完成 逆波兰表达式 的解析。 依赖升级 升级friendsofphp/php-cs-fixer为^3.0; 升级psr/container为^1.0|^2.0; 升级egulias/email-validator为^3.0; 升级markrogoyski/math-php为^2.0; 升级league/flysystem为^1.0|^2.0; 依赖项已更改 #3577 domnikl/statsd废弃,不再维护。作者建议改用slickdeals/statsd包; 即将弃用 API #3636 Hyperf\Utils\Resource将在 v2.3 中被弃用,请改用Hyperf\Utils\ResourceGenerator; 变更明细 #3334 将LengthAwarePaginator::toArray()的返回值更改为与Paginator::toArray()的一致; #3550 从kafka删除了broker和 bootstrap_server,请使用brokers和bootstrap_servers代替; #3580 将切面的默认优先级更改为 0; #3582 将 AMQP 的消费者标签更改为空字符串; #3634 使用 Fork Process 策略替换 BetterReflection策略; #3649 在hyperf/database使用gen:model时移除了roave/better-reflection; #3651 在 LazyLoader 中移除了roave/better-reflection; #3654 在其他组件中移除了roave/better-reflection; #3676使用promphp/prometheus_client_php代替endclothing/prometheus_client_php; #3694更改Hyperf\CircuitBreaker\CircuitBreakerInterface为支持 PHP8; 改CircuitBreaker::inc*Counter()到CircuitBreaker::incr*Counter(); 更改了 AbstractHandler::switch()方法的类型提示; #3706 在PHP8 中将@Middlewares({@Middleware(FooMiddleware::class)})的书写风格更改为#[Middlewares(FooMiddleware::class)]; #3715 重构nacos组件,一定要重读文档; #3722 删除了 config_apollo.php配置,请改用config_center.php; #3725 删除了 config_etcd.php配置,请改用config_center.php; #3730 从kafka中删除了brokers和update_brokers配置; #3733 删除了 zookeeper.php配置,请改用config_center.php; #3734 #3772 分割了nacos为config-nacos和service-governance-nacos; #3734 重命名nacos-sdk 组件名为 nacos; #3737 重构配置中心和配置驱动程序 添加AbstractDriver并将重复的代码并合到抽象类中 添加PipeMessageInterface以统一配置获取进程的消息结构 #3817 #3818 从 service-governance 组件中分离出 service-governance-consul 组件; 更多 其他变动 升级指南 我们提供了详尽的升级指南,请查阅官方文档 - 2.2 升级指南 官网及交流 Github 👈👈👈👈👈 点 Star 支持我们 Gitee 码云 👈👈👈👈👈 点 Star 支持我们 Hyperf 官网 Hyperf 文档 Hyperf 交流群: 862099724(已满) Hyperf 交流 2 群: 811414891(已满) Hyperf 交流 3 群: 589051831 钉钉群 一群: 34538367(已满) 钉钉群 二群: 34488757

优秀的个人博客,低调大师

使用Maven那么久了,你对企业级Maven的核心配置了解多少?

点击上方蓝色“冰河技术”,关注并选择“设为星标” 持之以恒,贵在坚持,每天进步一点点! 作者个人研发的在高并发场景下,提供的简单、稳定、可扩展的延迟消息队列框架,具有精准的定时任务和延迟队列处理功能。自开源半年多以来,已成功为十几家中小型企业提供了精准定时调度方案,经受住了生产环境的考验。为使更多童鞋受益,现给出开源框架地址: https://github.com/sunshinelyz/mykit-delay PS: 欢迎各位Star源码,也可以pr你牛逼哄哄的代码。 写在前面 相信从事Java工作的小伙伴们多多少少都会接触到Maven。使用Maven来搭建项目,能够极大的方便我们构建项目的依赖关系,对于项目中需要依赖的Jar包,也只是简单的在pom.xml中进行配置即可。可以说,Maven能够极大的提高我们的开发效率和项目的维护效率,能够统一项目的依赖环境,提高团队的协作效率。然而,尽管使用Maven的小伙伴很多,但真正掌握了Maven核心配置的又有多少呢? 项目依赖 项目依赖是指Maven 通过依赖传播、依赖优先原则、可选依赖、排除依赖、依赖范围等特性来管理项目classpath。 依赖传播特性 我们的项目通常需要依赖第三方组件,而第三方组件又会依赖其它组件遇到这种情况Maven会将依赖网络中的所有节点都会加入classpath当中,这就是Maven的依赖传播特性。 例如下面的配置 <!--添加springmvc依赖--><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.2.9.RELEASE</version></dependency> 项目直接依赖了spring-webmvc 叫直接依赖,而对commons-logging 依赖是通过webmvc传递的所以叫间接依赖。 依赖优先原则 基于依赖传播特性,导致整个依赖网络会很复杂,难免会出现相同组件不同版本的情况。Maven此时会基于依赖优先原则选择其中一个版本。 第一原则:最短路径优先。 第二原则:相同路径下配置在前的优先。 第一原则示例 <!--直接添加commons-logging--><dependency><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId><version>1.2</version></dependency> 上述例子中commons-logging 通过spring-webmvc 依赖了1.1.3,而项目中直接依赖了1.2,基于最短路径原则项目最终引入的是1.2 版本。 第二原则示例 主要步骤如下所示: (1)添加一个新工程Project B (2) 配置Project B 依赖 spring-web.3.2.9-RELEASE (3)当前工程直接依赖 Project B 配置完之后,当前工程 project A 有两条路径可以依赖 spring-web,选择哪一条 就取决于 对 webmvc 和 Project B的配置先后顺序。 Project A==> spring-webmvc 5.2.9-RELEASE ==> spring-web 5.2.9-RELEASE Project A==> Project B 1.0.SNAPSHOT ==>spring-web.3.2.9-RELEASE 注意:在同一pom文件,第二原则不再适用。如下配置,最终引用的是1.2 版本,而不是配置在前面的1.1.1版本。 <!--在1.2之前添加commons-logging--><dependency><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId><version>1.1.1</version></dependency><dependency><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId><version>1.2</version></dependency> 可选依赖 可选依赖表示这个依赖不是必须的。通过在<dependency></dependency>中添 加<optional>true</optional> 表示,默认是不可选的。可选依赖不会被传递。 排除依赖 即排除指定的间接依赖。通过配置<exclusions></exclusions>配置排除指定组件。 例如,我们可以使用下面的配置来排除对于spring-web的依赖。 <!--排除指定项目--><exclusions><exclusion><groupId>org.springframework</groupId><artifactId>spring-web</artifactId></exclusion></exclusions> 依赖范围 像junit 这个组件 我们只有在运行测试用例的时候去要用到,这就没有必要在打包的时候把junit.jar 包过构建进去,可以通过Maven 的依赖范围配置<scope></scope>来达到这种目的。Maven 总共支持以下四种依赖范围: compile(默认): 编译范围,编译和打包都会依赖。 provided: 提供范围,编译时依赖,但不会打包进去。如:servlet-api.jar runtime: 运行时范围,打包时依赖,编译不会。如:mysql-connector-java.jar test: 测试范围,编译运行测试用例依赖,不会打包进去。如:junit.jar system: 表示由系统中classpath指定。编译时依赖,不会打包进去。配合 <systemPath></systemPath> 一起使用。示例:java.home下的tool.jar system 除了可以用于引入系统classpath 中包,也可以用于引入系统非maven 收录的第三方Jar,做法是将第三方Jar放置在 项目的 lib 目录下,然后配置 相对路径,但因system 不会打包进去所以需要配合 maven-dependency-plugin 插件配合使用。当然,我还是推荐小伙伴们通过 将第三方Jar手动install 到仓库。 接下来,我们就列举几个简单的使用示例。 system 的通常使用方式 <dependency><groupId>com.sun</groupId><artifactId>tools</artifactId><version>${java.version}</version><scope>system</scope><optional>true</optional><systemPath>${java.home}/../lib/tools.jar</systemPath></dependency> system 另外使用方式 ,将工程内的jar直接引入 <dependency><groupId>jsr</groupId><artifactId>jsr</artifactId><version>3.5</version><scope>system</scope><optional>true</optional><systemPath>${basedir}/lib/jsr305.jar</systemPath></dependency> 通过插件 将system 的jar 打包进去 <plugin><groupId>org.apache.maven.plugins</groupId>\<artifactId>maven-dependency-plugin</artifactId><version>2.10</version><executions><execution><id>copy-dependencies</id><phase>compile</phase><goals><goal>copy-dependencies</goal></goals><configuration><outputDirectory>${project.build.directory}/${project.build.finalName}/WEB-INF/lib</outputDirectory><includeScope>system</includeScope><excludeGroupIds>com.sun</excludeGroupIds></configuration></execution></executions></plugin> 手动加入本地仓库 mvninstall:install-file-Dfile=mykit-transaction-message.jar-DgroupId=io.mykit-DartifactId=mykit-transaction-message-Dversion=1.0.0-RELEASE-Dpackaging=jar 项目聚合与继承 聚合 聚合是指将多个模块整合在一起,统一构建,避免一个一个的构建。聚合需要个父工程,然后使用 <modules></modules> 进行配置其中对应的是子工程的相对路径。例如下面的配置。 <modules><module>mykit-dao</module><module>mykit-service</module></modules> 继承 继承是指子工程直接继承父工程 当中的属性、依赖、插件等配置,避免重复配置。继承包括如下几种方式。 属性继承 依赖继承 插件继承 注意:上面的三个配置子工程都可以进行重写,重写之后以子工程的为准。 依赖管理 通过继承的特性,子工程是可以间接依赖父工程的依赖,但多个子工程依赖有时并不一至,这时就可以在父工程中加入<dependencyManagement></dependencyManagement> 声明该工程需要的JAR包,然后在子工程中引入。例如下面的配置。 <!--父工程中声明junit4.12--><dependencyManagement><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version></dependency></dependencies></dependencyManagement><!--子工程中引入--><dependency><groupId>junit</groupId><artifactId>junit</artifactId></dependency> 项目属性 通过 <properties></properties> 配置属性参数,可以简化配置。例如下面的配置。 <!--配置proName属性--><properties><projectName>projectName</projectName></properties> 我们可以在pom.xml文件中使用下面的形式来引入配置的参数。 ${projectName} 接下来,我们再来看几个Maven的默认属性,如下所示。 ${basedir} 项目根目录 ${version}表示项目版本; ${project.basedir}同${basedir}; ${project.version}表示项目版本,与${version}相同; ${project.build.directory} 构建目录,缺省为target ${project.build.sourceEncoding}表示主源码的编码格式; ${project.build.sourceDirectory}表示主源码路径; ${project.build.finalName}表示输出文件名称; ${project.build.outputDirectory} 构建过程输出目录,缺省为target/classes 项目构建配置 构建资源配置 基本配置示例: <defaultGoal>package</defaultGoal><directory>${basedir}/target2</directory><finalName>${artifactId}-${version}</finalName> 说明: defaultGoal:执行构建时默认的goal或phase,如jar:jar或者package等 directory:构建的结果所在的路径,默认为${basedir}/target目录 finalName:构建的最终结果的名字,该名字可能在其他plugin中被改变 resources 配置示例 <resources><resource><directory>src/main/java</directory><includes><include>**/*.MF</include><include>**/*.xml</include></includes><filtering>true</filtering></resource><resource><directory>src/main/resources</directory><includes><include>**/*</include><include>*</include></includes><filtering>true</filtering></resource></resources> 说明: resources:build过程中涉及的资源文件 targetPath:资源文件的目标路径 directory:资源文件的路径,默认位于${basedir}/src/main/resources/目录下 includes:一组文件名的匹配模式,被匹配的资源文件将被构建过程处理 excludes:一组文件名的匹配模式,被匹配的资源文件将被构建过程忽略。同时被includes和excludes匹配的资源文件,将被忽略。 filtering:默认false ,true 表示 通过参数 对 资源文件中 的${key} 在编译时进行动态变更。替换源-Dkey 和pom 中的 值 或 中指定的properties 文件。 重磅福利 微信搜一搜【冰河技术】微信公众号,关注这个有深度的程序员,每天阅读超硬核技术干货,公众号内回复【PDF】有我准备的一线大厂面试资料和我原创的超硬核PDF技术文档,以及我为大家精心准备的多套简历模板(不断更新中),希望大家都能找到心仪的工作,学习是一条时而郁郁寡欢,时而开怀大笑的路,加油。如果你通过努力成功进入到了心仪的公司,一定不要懈怠放松,职场成长和新技术学习一样,不进则退。如果有幸我们江湖再见! 另外,我开源的各个PDF,后续我都会持续更新和维护,感谢大家长期以来对冰河的支持!! 写在最后 如果你觉得冰河写的还不错,请微信搜索并关注「 冰河技术 」微信公众号,跟冰河学习高并发、分布式、微服务、大数据、互联网和云原生技术,「 冰河技术 」微信公众号更新了大量技术专题,每一篇技术文章干货满满!不少读者已经通过阅读「 冰河技术 」微信公众号文章,吊打面试官,成功跳槽到大厂;也有不少读者实现了技术上的飞跃,成为公司的技术骨干!如果你也想像他们一样提升自己的能力,实现技术能力的飞跃,进大厂,升职加薪,那就关注「 冰河技术 」微信公众号吧,每天更新超硬核技术干货,让你对如何提升技术能力不再迷茫! 留言区 本文分享自微信公众号 - 冰河技术(hacker-binghe)。如有侵权,请联系 support@oschina.cn 删除。本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

优秀的个人博客,低调大师

Hyperf 1.1.8 发布,企业级的 PHP 微服务云原生协程框架

更新内容 本周更新主要为 Redis 组件新增一个 Lua Script 管理功能,用于更方便的管理和使用 Lua Script,同时我们还修复了一些组件的 🐛Bug 和做了一些优化工作,使 Hyperf 1.1.* 系列版本更加的健壮了,发布于 1.1.8 版,建议使用 1.1 的用户更新。 直接访问 官网 hyperf.io 或 文档 hyperf.wiki 查看。 新增 #965 新增 Redis Lua 模块,用于管理 Lua 脚本; #1023 hyperf/metric 组件的 Prometheus 驱动新增 CUSTOM_MODE 模式; 修复 #1013 修复 JsonRpcPoolTransporter 配置合并失败的问题; #1006 修复 gen:model 命令生成的属性的顺序; 变更 #1021 WebSocket 客户端新增默认端口支持,根据协议默认为 80 和 443; #1034 去掉了 Hyperf\Amqp\Builder\Builder 的 arguments 参数的 array 类型限制,允许接受其他类型如 AmqpTable; 优化 #1014 优化 Command::execute 的返回值类型; #1022 提供更清晰友好的连接池报错信息; #1039 在 CoreMiddleware 中自动设置最新的 ServerRequest 对象到 Context; 关于 Hyperf Hyperf 是基于 Swoole 4.4+ 实现的高性能、高灵活性的 PHP 协程框架,内置协程服务器及大量常用的组件,性能较传统基于 PHP-FPM 的框架有质的提升,提供超高性能的同时,也保持着极其灵活的可扩展性,标准组件均基于 PSR 标准 实现,基于强大的依赖注入设计,保证了绝大部分组件或类都是 可替换 与 可复用 的。 框架组件库除了常见的协程版的 MySQL 客户端、Redis 客户端,还为您准备了协程版的 Eloquent ORM、WebSocket 服务端及客户端、JSON RPC 服务端及客户端、GRPC 服务端及客户端、OpenTracing(Zipkin, Jaeger) 客户端、Guzzle HTTP 客户端、Elasticsearch 客户端、Consul 客户端、ETCD 客户端、AMQP 组件、Nats 组件、Apollo、ETCD、Zookeeper 和阿里云 ACM 的配置中心、基于令牌桶算法的限流器、通用连接池、熔断器、Swagger 文档生成、Swoole Tracker、Blade、Smarty、Twig、Plates 和 ThinkTemplate 视图引擎、Snowflake 全局ID生成器、Prometheus 监控 等组件,省去了自己实现对应协程版本的麻烦。 Hyperf 还提供了 基于 PSR-11 的依赖注入容器、注解、AOP 面向切面编程、基于 PSR-15 的中间件、自定义进程、基于 PSR-14 的事件管理器、Redis/RabbitMQ 消息队列、自动模型缓存、基于 PSR-16 的缓存、Crontab 秒级定时任务、Session、i18n 国际化、Validation 表单验证 等非常便捷的功能,满足丰富的技术场景和业务场景,开箱即用。 框架初衷 尽管现在基于 PHP 语言开发的框架处于一个百花争鸣的时代,但仍旧未能看到一个优雅的设计与超高性能的共存的完美框架,亦没有看到一个真正为 PHP 微服务铺路的框架,此为 Hyperf 及其团队成员的初衷,我们将持续投入并为此付出努力,也欢迎你加入我们参与开源建设。 设计理念 Hyperspeed + Flexibility = Hyperf,从名字上我们就将 超高速 和 灵活性 作为 Hyperf 的基因。 对于超高速,我们基于 Swoole 协程并在框架设计上进行大量的优化以确保超高性能的输出。 对于灵活性,我们基于 Hyperf 强大的依赖注入组件,组件均基于 PSR 标准 的契约和由 Hyperf 定义的契约实现,达到框架内的绝大部分的组件或类都是可替换的。 基于以上的特点,Hyperf 将存在丰富的可能性,如实现 单体 Web 服务,API 服务,网关服务,分布式中间件,微服务架构,游戏服务器,物联网(IOT)等。 文档齐全 我们投入了大量的时间用于文档的建设,以解决各种因为文档缺失所带来的问题,文档上也提供了大量的示例,对新手同样友好。 Hyperf 官方开发文档 生产可用 我们为组件进行了大量的单元测试以保证逻辑的正确,目前存在 1233 个单测共 3654 个断言条件,同时维护了高质量的文档,在 Hyperf 正式对外开放(2019年6月20日)之前,便已经过了严酷的生产环境的考验,我们才正式的对外开放该项目,现在已有很多的大型互联网企业都已将 Hyperf 部署到了自己的生产环境上并稳定运行。 官网及交流 Github 👈👈👈👈👈 点 Star 支持我们 Gitee 码云 👈👈👈👈👈 点 Star 支持我们 Hyperf 官网 Hyperf 文档

优秀的个人博客,低调大师

Hyperf v1.0.12 发布,企业级的 PHP 微服务协程框架

更新内容 本周更新主要为协程上下文增加了一个很好用的 override 方法,同时为 Logger 配置增加了多个 Handler 的配置形式,同时修复了一些其它组件的 Bug🐛,发布于 1.0.12 版,建议使用到 GRPC、WebSocket 和 文件上传 的用户更新。 相关组件的文档可通过上面的超链接进入查看,或直接访问 官网 https://hyperf.io 或 文档 https://doc.hyperf.io 查看。 Hyperf\Utils\Context::override() 的使用方法 <?php use Hyperf\HttpServer\Contract\RequestInterface; use Hyperf\Utils\Context; // 从协程上下文取出 $request 对象并设置 key 为 foo 的 Header,然后再保存到协程上下文中 $request = Context::override(RequestInterface::class, function (RequestInterface $request) { return $request->withAddedHeader('foo', 'bar'); })` 新增 #405 增加 Hyperf\Utils\Context::override() 方法,现在你可以通过 override 方法获取某些协程上下文的值并修改覆盖它; #415 对 Logger 的配置文件增加多个 Handler 的配置支持; 变更 #431 移除了 Hyperf\GrpcClient\GrpcClient::openStream() 的第 3 个参数,这个参数不会影响实际使用; 修复 #414 修复 Hyperf\WebSockerServer\Exception\Handler\WebSocketExceptionHandler 内的变量名称错误的问题; #424 修复 Guzzle 在使用 Hyperf\Guzzle\CoroutineHandler 时配置 proxy 参数时不支持数组传值的问题; #430 修复 Hyperf\HttpServer\Request::file() 当以一个 Name 上传多个文件时,返回格式不正确的问题; #431 修复 GRPC Client 的 Request 对象在发送 Force-Close 请求时缺少参数的问题; 弃用标记 #425 标记 Hyperf\HttpServer\HttpServerFactory, Hyperf\JsonRpc\HttpServerFactory, Hyperf\JsonRpc\TcpServerFactory 为 @deprecated 状态, 这 3 个类将在 v1.1 移除; 关于 Hyperf Hyperf 是基于 Swoole 4.3+ 实现的高性能、高灵活性的 PHP 协程框架,内置协程服务器及大量常用的组件,性能较传统基于 PHP-FPM 的框架有质的提升,提供超高性能的同时,也保持着极其灵活的可扩展性,标准组件均基于 PSR 标准 实现,基于强大的依赖注入设计,保证了绝大部分组件或类都是 可替换 与 可复用 的。 框架组件库除了常见的协程版的 MySQL 客户端、Redis 客户端,还为您准备了协程版的 Eloquent ORM、WebSocket 服务端及客户端、JSON RPC 服务端及客户端、GRPC 服务端及客户端、Zipkin (OpenTracing) 客户端、Guzzle HTTP 客户端、Elasticsearch 客户端、Consul 客户端、ETCD 客户端、AMQP 组件、Apollo 配置中心、阿里云 ACM 应用配置管理、ETCD 配置中心、基于令牌桶算法的限流器、通用连接池、熔断器、Swagger 文档生成、Swoole Enterprise 企业版、Blade 和 Smarty 视图引擎 等组件,省去了自己实现对应协程版本的麻烦。 Hyperf 还提供了 基于 PSR-11 的依赖注入容器、注解、AOP 面向切面编程、基于 PSR-15 的中间件、自定义进程、基于 PSR-14 的事件管理器、Redis/RabbitMQ 消息队列、自动模型缓存、基于 PSR-16 的缓存、Crontab 定时任务 等非常便捷的功能,满足丰富的技术场景和业务场景,开箱即用。 框架初衷 尽管现在基于 PHP 语言开发的框架处于一个百花争鸣的时代,但仍旧未能看到一个优雅的设计与超高性能的共存的完美框架,亦没有看到一个真正为 PHP 微服务铺路的框架,此为 Hyperf 及其团队成员的初衷,我们将持续投入并为此付出努力,也欢迎你加入我们参与开源建设。 设计理念 Hyperspeed + Flexibility = Hyperf,从名字上我们就将 超高速 和 灵活性 作为 Hyperf 的基因。 对于超高速,我们基于 Swoole 协程并在框架设计上进行大量的优化以确保超高性能的输出。 对于灵活性,我们基于 Hyperf 强大的依赖注入组件,组件均基于 PSR 标准 的契约和由 Hyperf 定义的契约实现,达到框架内的绝大部分的组件或类都是可替换的。 基于以上的特点,Hyperf 将存在丰富的可能性,如实现 单体 Web 服务,API 服务,网关服务,分布式中间件,微服务架构,游戏服务器,物联网(IOT)等。 文档齐全 我们投入了大量的时间用于文档的建设,以解决各种因为文档缺失所带来的问题,文档上也提供了大量的示例,对新手同样友好。 Hyperf 官方开发文档 生产可用 我们为组件进行了大量的单元测试以保证逻辑的正确,目前存在 576 个单测共 1909 个断言条件,同时维护了高质量的文档,在 Hyperf 正式对外开放(2019年6月20日)之前,便已经过了严酷的生产环境的考验,我们才正式的对外开放该项目。 官网及交流 Github 👈 点 Star 支持我们 Gitee 码云 👈 点 Star 支持我们 Hyperf 官网

优秀的个人博客,低调大师

企业级分布式应用服务 EDAS 邀您参加「有奖评测」

一、这是个什么样的评测活动? EDAS 于近日发布了重大更新,增强了对主流微服务框架的原生支持,实现SpringCloud & Dubbo用户代码零侵入就能迁移至EDAS,降低开发者的接入门槛,提升体验,打造闭环高效的研发运维体系。同时,发布EDAS Serverless公测版本,成为国内首个基于Kubernetes、并支持微服务框架的无服务器容器。 现诚邀您参与新版本试用。 二、参与评测活动,我将可以获得什么? 极客评测大奖(3名):价值800元 (淘宝心选旅行箱+淘宝心选商务背包)x 1+阿里云通用代金券400元 x 2 先锋评测大奖(7名):价值499元 天猫精灵X1 x 1+阿里云通用代金券300元 x 2 优秀评测大奖(15名):阿里云中间件定制卫衣 x 1+《码出高效:Java 开发手册》x 1+阿里云通用代金券50元 x

优秀的个人博客,低调大师

《Spring Boot 实战开发》 —— 基于 Gradle + Kotlin的企业级应用开发最佳实践

第 I 部分 Spring Boot 框架基础 第1章 Spring Boot 简介 第2章 快速开始 HelloWorld 第3章 深入理解Spring Boot 自动配置 第 II 部分Spring Boot 项目综合实战 第4章 Spring Boot 集成 MyBatis数据库层开发 第5章 Spring Boot 集成 JPA数据库层开发 第6章 Spring Boot Gradle插件应用开发 第7章 使用 Spring MVC开发 Web 应用 第8章 Spring Boot 自定义 Web MVC配置 第9章 Spring Boot 中的AOP 编程 第10章 Spring Boot 集成Spring Security 安全开发 第11章 Spring Boot 集成React.js开发前后端分离项目 第12章 任务调度与邮件服务开发 第13章 Spring Boot 集成 WebFlux 开发 Reactive Web 应用 第14章 Spring Boot 缓存 第15章 使用Spring Session 集成 Redis 实现Session共享 第16章 使用 Zuul 开发 API Gateway 第17章 Spring Boot 日志 第 III 部分Spring Boot 系统监控、测试与运维 第18章 Spring Boot 应用监控:Actuator与 Admin 第19章 Spring Boot 应用的测试 第20章 Spring Boot 应用 Docker 化

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册