zookeeper

分布式系统中的协调系统,提供的服务主要有:配置服务、名字服务、分布式同步、组服务等。
作为一名有追求的php程序员,分布式架构必须搞。

安装

docker 安装zookeeper

docker pull zookeeper
docker run --privileged=true -d --name zookeeper --publish 2181:2181  -d zookeeper:latest
docker ps

服务已经启动了

phpstrom插件安装

方便查看
phpstrom-> setting ->plugs 搜索zookeeper, 然后install.
重启编辑器,进入setting->other settings ->zookeeper 填上刚才docker主机的地址和端口,勾选enable zookeeper和start Tooltip,然后在编辑器可以看到zookeeper的项目

php扩展安装

php安装zookeeper扩展需要先安装zookeeper,因为刚才我用docker装的,所以这里要编译安装一下
稳定版地址:http://mirror.bit.edu.cn/apache/zookeeper/stable/

wget http://mirror.bit.edu.cn/apache/zookeeper/stable/zookeeper-3.4.12.tar.gz
tar -zxvf zookeeper-3.4.12.tar.gz
cd zookeeper-3.4.12/src/c/
./configure --prefix=/usr/local/zookeeper
make && make install

然后添加到php.ini
哦哟,模块不认识。。。换了几个版本也不行。。哎,放弃

换libzookeeper

git clone https://github.com/Timandes/libzookeeper
/usr/local/php/bin/phpize
./configure --with-libzookeeper-dir=/usr/local/zookeeper
make && make install

学习文档

http://spring.io/guides/gs/scheduling-tasks/
学习参考:https://www.jianshu.com/p/c7492aeb35a1

Scheduled 定时任务

注解@Scheduled
cron属性
Seconds : 可出现", - * /"四个字符,有效范围为0-59的整数
Minutes : 可出现", - * /"四个字符,有效范围为0-59的整数
Hours : 可出现", - /"四个字符,有效范围为0-23的整数DayofMonth : 可出现", - / ? L W C"八个字符,有效范围为0-31的整数
Month : 可出现", - * /"四个字符,有效范围为1-12的整数或JAN-DEcDayof
Week : 可出现", - / ? L C #"四个字符,有效范围为1-7的整数或SUN-SAT两个范围。1表示星期天,2表示星期一, 依次类推Year : 可出现", - /"四个字符,有效范围为1970-2099年

列子

"0 0 12 * * ?"    每天中午十二点触发
"0 15 10 ? * *"    每天早上10:15触发
"0 15 10 * * ?"    每天早上10:15触发
"0 15 10 * * ? *"    每天早上10:15触发
"0 15 10 * * ? 2005"    2005年的每天早上10:15触发
"0 * 14 * * ?"    每天从下午2点开始到2点59分每分钟一次触发
"0 0/5 14 * * ?"    每天从下午2点开始到2:55分结束每5分钟一次触发
"0 0/5 14,18 * * ?"    每天的下午2点至2:55和6点至6点55分两个时间段内每5分钟一次触发
"0 0-5 14 * * ?"    每天14:00至14:05每分钟一次触发
"0 10,44 14 ? 3 WED"    三月的每周三的14:10和14:44触发
"0 15 10 ? * MON-FRI"    每个周一、周二、周三、周四、周五的10:15触发

fixedRate 上一个调用开始后再次调用的延时,不等执行完
fixedDelay 等待执行完成
initialDelay 第一次延时

联系和总结

这个比较简单,没有什么好说的,熟悉linux crontab的,格式差不多

在看了文档后,感觉能做项目了,下了几个开源项目,感觉看起还是吃力,看来欲速则不达。那就一步步来,手撸他的demo:http://spring.io/guides/

Building a RESTful Web Service

地址:http://spring.io/guides/gs/rest-service/

git clone https://github.com/spring-guides/gs-rest-service
cd gs-rest-service/complete
mvn spring-boot:run

访问http://localhost:8080/greeting,熟悉的hello world

代码分析

  1. 先看pom.xml
    都是常规配置
  2. 进入src/main,找到Application.java,这里启动了一个Spring Application
  3. 查看控制器 GreetingController.java
    由于是java新手,一直有个疑问,路由都是@RequestMapping映射的,我如何去找到相应的控制器呢?还是说约定大于配置,按规范的名字命名,自己去找?

代码中AtomicLong不用去管,用个自增模拟id,结果返回了个Greeting对象,通过他的get方法返回了2个key的对象。
这就是最简单的一个控制器

笔记

当然作为新手,需要在这个demo里面练习下:
@Controller 控制器注解
@RestController Rest接口注解,相当于@Controller+@ResponseBody的组合,用于返回非web格式(html)

@RequestMapping 里面的一些参数
name,value,method,path,params,headers,consumes,produces

@RequestParam
value,defaultValue

@ResponseBody 结果写入response body,否则底层会将方法的返回值封装为ModelAndView对象。经常用于ajax
@RequestBody 封装请求参数

请求获取和返回结果应该是配置环境后第二步重要的,开发中会经常遇到。