之前代码里面的contact是可以重复的,现在要将其改成unique的,改代码容易,但是还要兼容之前的数据,就要想办法将之前重复的给改掉
方法1: 手动写SQL,在执行到具体的migrations时先执行SQL,但是这个不太统一,另外推代码时容易忘记。
方法2: 框架用的人多就是好,不要重复造轮子,如下:
1 |
|
之前代码里面的contact是可以重复的,现在要将其改成unique的,改代码容易,但是还要兼容之前的数据,就要想办法将之前重复的给改掉
方法1: 手动写SQL,在执行到具体的migrations时先执行SQL,但是这个不太统一,另外推代码时容易忘记。
方法2: 框架用的人多就是好,不要重复造轮子,如下:
1 |
|
来到公司已经半年了,经历了蛮多的事情,慢慢的从陌生到熟悉到被信任,从部分开发到主力开发,这个过程是非常艰难但又非常开心但又非常有责任的。从与项目经理交流获取业务流程、细节到脑中大致出现业务模型然后到数据库的表结构设计到提供api到测试到文档的编写,每一步都亲力亲为,很多时候又会特地放慢脚步,生怕出现哪个地方没有想到,哪个地方设计的不合理。程序写完并且走完单元测试后,还要写文档给客户端以及Web端,要有分组,哪些给客户端的,哪些给Web端的,哪些接口应该放在一起,怎么将接口排序,哪些接口需不需要验证,需不需要授权,参数怎么传,格式,校验……
最后主要还要在客户端以及Web端看不太明白时还要过去跟他解释、示范,整个过程都是非常的费力以及也是被逐渐熟悉并信任的过程。如果客户端或者web端说某个接口是不是有问题或者测试说这里表现的有些问题,自己还有点心惊胆战以及半信半疑,当发现是他们没有填写对或者没读懂文档或者其它问题导致时,这个过程就慢慢的被人所信任,一旦出现了问题,你的能力就会被怀疑,也许这个责任是比较有压力的,也是感受的比较深的。
目前的我觉得后端担负的责任以及压力还是蛮大的,所有的上层建筑均踩在后端的基础上,想起之前公司总监说后端最终展示出来的可能只是冰山一角。也许这句话有些夸大,但是慢慢的我感觉是对的,所有人都在等你接口,都在等你的实现,虽然我很喜欢后端,但是这个有些倾斜的天平让我觉得有些不适应。
但是我还是很喜欢这个角色,也很喜欢接受更多的挑战,不仅仅是技术方面的,还有在整个团队中的挑战,以前觉得接触更多新的技术可以让自己觉得更具有挑战性,现在有些觉得把事情做好并被认可可能更具备挑战性。我觉得我可以做的更好,也可以担负起更多的责任,慢慢努力,慢慢走!
根据不同的tag进行定位,例如:
1 | { |
上面表示: 发送消息给农技员ID为12、过程为67、环境为test。又由于多台设备可以指定相同的tag,从而单条推送可以推送给多台设备。所以此处的组播意思可能就变了,根据不同的tag组合定位到不同的设备个、群体,实现组播发送,此处tag为app端设置。
官方文档限制每分钟只能发送5条消息,所以后端维持一个队列A
以及计时器
,进行分批发送,保证消息发送出去。
此队列实现思想:
此计时器实现思想:
201712100304
,利用redis incr进行操作此key,如果大于5,则表示此分钟已经发送满,则继续轮训至下分钟进行发送队列B
,实现原子性操作,此处只能表示此任务已经被执行了,但是不能代表执行成功,此处可参考错误
对于错误1,理论应再次推入队列A
,但此处不考虑。
对于错误2,除了应用次数限制错误,其余错误可以避免。
此处队列与存储均使用redis进行实现,所以理论上只要redis服务不停止,服务状态与结果均可以持久化存储,又由于推送非持久化过程,所以此处暂时满足。
后端维持一个定时任务,到达时间后,会将消息推送给队列A,等待发送。
此处可以动态增、删任务。
将此消息推到队首/尾,等待发送。
转战友盟,此片结束。
嗯嗯,为什么会有这篇文章??
知道当你写代码的时候前端让你拉代码的痛苦么~~,没有运维我来上,手动多了就更😡了,所以,你懂的。。
1 | ## 搭建 |
1 |
|
invoke \
–> proto
–> protos
–> hello.proto
1 | python -m grpc_tools.protoc -I proto --python_out=. --grpc_python_out=. proto/protos/hello.proto |
最后的目录结构:
invoke
–> proto
–> protos
–> hello.proto
–> protos
–> hello_pb2.py
–> hello_pb2_grpc.py
关于protocol-buffers的语法可以在:
https://developers.google.com/protocol-buffers/docs/proto3
找到,只介绍proto3的语法。
1 | syntax = "proto3"; |
相比于dep,选择govendor
安装
1 | export GOPATH="/Users/zhangyu/go" |
1 | guest用户只能本地访问,所以: |
GitLab CI中文文档
1 | https://doc.gitlab.cc/ce/ci/README.html |
1 | https://docs.gitlab.com/runner/install/ |
For Debian/Ubuntu
1 | # For Debian/Ubuntu |
1 | # For Debian/Ubuntu |
1 | sudo gitlab-ci-multi-runner register |
1 | # For Debian/Ubuntu |
缺失模块。
1、请确保node版本大于6.2
2、在博客根目录(注意不是yilia根目录)执行以下命令:
npm i hexo-generator-json-content --save
3、在根目录_config.yml里添加配置:
jsonContent: meta: false pages: false posts: title: true date: true path: true text: false raw: false content: false slug: false updated: false comments: false link: false permalink: false excerpt: false categories: false tags: true