#Renewal
##introduce
这是一个公司项目。用于定期自动续费账号开通的套餐或者按照某些数据触发条件自动退费,停机公司等操作。
使用到了swoole_timer_tick,来定期请求数据中心。数据中心取出相对的数据,筛选出合适的数据,处理成相应格式的数据将数据写入RabbitMQ消息队列。
然后在消费端,使用swoole multi processor启动多个RabbitMQ消费者,消费数据。
##how to use
项目使用了pimple实现依赖注入。
项目基本的服务,如Redis、DB、log、config等默认服务都在ServiceContainer中定义注册。
可选服务如RabbitMQ的Producer和Customer,都可以在实例化ServiceContainer的时候传入对应的ServicerProvider实现注册。
如:
$container = new \App\Utils\ServiceContainer([\App\Utils\Customer\ServiceProvider::class]);这就实现了Customer服务的注册,使用时只需要调用对应的getInstance()方法,获取服务实例即可;
如:
$customer = $container->customer->getInstance();##helper function app($service, $key = '')
app()帮助函数简单化了Container的实例,方便依赖注入的使用。
第一个参数$service,为需要使用的服务的名称(服务具体名称的定义,参看个服务对应的ServiceProvider)。
例如需要一个redis实例,可以这样调用:
app('redis');redis服务的默认配置为,config/app.php中的redis数组,如果有另外的配置链接,可以按以下方式调用
app('redis','xxx');//xxx为`config/app.php`另外一个配置数组。本项目使用package包可参看composer.json文件。具体的使用文档参看package的官方文档。
##new a service
每一个服务都需要一个ServiceProvider和Client。其中ServiceProvider需要实现Pimple\ServiceProviderInterface接口。Client也都需要实现App\Interfaces\ClientInterface接口
注册时候,可以按照是否是基础服务,选择加入到ServiceContainer中或者,和上面提到的Producer服务一样动态注册。