在spring boot中3分钟上手分布式任务调度系统xxl-job
xxl-job在鼎鼎大名的quartz任务调度系统上进行了二次封装,变得更好用了
项目地址:https://github.com/xuxueli/xxl-job
官方文档:http://www.xuxueli.com/xxl-job/#/
虽然官方文档也很全,很详细,但需要多花些时间上手,以下是我根据官方文档整理出的快速上手步骤,可以减少上手需要花费的时间和一些生产使用需要注意的点
在mysql中执行以下sql
tables_xxl_job.sql
这个sql创建xxl-job的数据库和调度任务的表
记下mysql的地址,用户名和密码
使用docker一键启动调度中心
docker run -d --rm \
-e PARAMS="--spring.datasource.url=jdbc:mysql://你的mysql数据库ip:3306/xxl-job?Unicode=true&characterEncoding=UTF-8 --spring.datasource.username=你的mysql数据库用户名 --spring.datasource.password=你的mysql数据库密码" \
-p 8680:8080 \
--name xxl-job-admin xuxueli/xxl-job-admin:2.0.2
在浏览器中使用默认用户名和密码 admin 123456 登陆查看效果
项目排期工具OmniPlan实用指南
官方文档:
- https://support.omnigroup.com/doc-assets/OmniPlan-Mac/OmniPlan-Mac-v3.0.0.1/zh/EPUB/xhtml/03_tutorial.xhtml
- https://support.omnigroup.com/documentation/omniplan/mac/3.0/zh/
官方文档虽然很全,但是不太容易快速上手,按照下面的步骤可以快速上手这个软件,官方文档在需要的时候可以花时间去研究
选择模版
软件内置4个模版(排期1是我加的,忽略)
目前在使用的是第二个 “自动调整计划” 这个模版,这个模版可以累加排期时间,一般选这个就可以了
基于顺丰同城接口编写sdk,java三方sdk编写思路
由于公司外卖业务需要用到顺丰的配送体系,技术上需要对接顺丰
个人比较感兴趣,但是顺丰没有提供sdk,所以研究下自己写了一个
完整代码已上传github 🎉:https://github.com/neatlife/spring-boot-sfcity
技术选型
三方sdk编写有两种实现方式
- 不依赖框架,更通用,但是集成成本较高
- 依赖框架,比如spring boot,这样使用起来效率更高
为了提高使用效率,这里选择基于spring boot框架进行编写
前期准备
有很多基于spring boot的sdk了,骨架就不需要自行搭建了,找了下面几个进行参考
- https://github.com/jibaole/spring-boot-starter-alimq
- https://github.com/spring-projects/spring-data-redis
研究api文档
顺丰同城api文档地址:http://commit-openic.sf-express.com/open/api/docs/index#/apidoc
目前顺丰同城的开发者api个人可以注册,注册后可以设置回调地址
订单系统设计,消息队列幂等处理思路
技术栈
- spring boot 作为基础框架
- 阿里云rocketmq作为消息队列,处理延迟,分区,无序消息
- 使用了阿里云消息队列的spring boot库spring-boot-starter-alimq
订单系统在整个系统里的作用
- app: app作为下单入口,在app端生成订单后,通过消息队列传递到订单系统里生成订单
- 推送到店:订单系统生成完成订单后,将把订单发送到门店进行餐品制作,通过http调用推送到店里,店里的收银机等设备根据订单状态打印小票,标签,制作餐品等
- 店里将订单制作完成后,将把订单制作完成的状态回传订单系统
系统核心部分交互流程图
基于spring boot框架进行二次封装,微型框架编写思路
目标:减少重复代码,提高开发效率,项目地址:https://github.com/neatlife/jframework
欢迎star,欢迎pr(求star, 求star, 求star)
可封装功能列表
E文 | 功能 | 目前作用 |
---|---|---|
controller | 控制器父类 | 简化控制器里的常见操作 |
exception | 异常 | 统一全局业务异常操作 |
handler | 异常拦截 | 全局异常拦截到日志里 |
http | 请求响应实体 | 统一全局响应实体 |
hystrix | hystrix事件拦截 | 熔断时发送报警邮件 |
jpa | jpa非业务重复代码封装 | 自动给deleted_at, updated_at, created_at赋值 |
json | 响应json数据的二次处理 | 自动格式化金额小数位数 |
listener | spring boot框架事件 | 在框架启动时给util注入service实例 |
logback | 自定义logback日志输出 | 将日志输出到elk的redis,方便elk统一进行日志处理 |
model | 基础jpa实体 | 包含deleted_at, updated_at, created_at字段的实体 |
redis | 自定义redis序列化和反序列化操作 | 使用GenericJackson2JsonRedisSerializer序列化redis值,提高可读性 |
request | 自定请求数据的解析 | 处理json请求 |
springfox | 自定义springfox文档解析 | ApiClass支持文档描述引用 |
util | 常用工具收集 | 比如json, http请求等常用工具类 |
validator | 请求参数自定义校验 | 检查参数长度 |
apiversion | 支持不同的api的版本到不同的控制器逻辑 | 参考 MainController |
服务网格应用istio上线流程[Service Mesh]
istio典型应用上线步骤分为3步
- 将应用打包成docker镜像,并使用istioctl部署到k8s集群上
- 制作路由规则,指定选择器,进行流量过滤,指定熔断规则等
- 制作网关选择网关服务进行暴露一般是网关服务,内部服务不需要
部署flaskapp
这里拿flaskapp举例:https://github.com/fleeto/flaskapp
编写istio 项目部署文件:flask.istio.yaml
apiVersion: v1
kind: Service
metadata:
name: flaskapp
labels:
app: flaskapp
spec:
selector:
app: flaskapp
ports:
- name: http
port: 80
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: flaskapp-v1
spec:
replicas: 1
template:
metadata:
labels:
app: flaskapp
version: v1
spec:
containers:
- name: flaskapp
image: dustise/flaskapp
imagePullPolicy: Always
env:
- name: version
value: v1
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: flaskapp-v2
spec:
replicas: 1
template:
metadata:
labels:
app: flaskapp
version: v2
spec:
containers:
- name: flaskapp
image: dustise/flaskapp
imagePullPolicy: Always
env:
- name: version
value: v2
阿里云ons队列监控api深度使用
文档地址:
- https://help.aliyun.com/document_detail/29597.html
- https://help.aliyun.com/document_detail/44419.html
拿获取 查询消费堆积 这个关键监控接口举例
创建项目并引入监控包和客户端包
创建spring boot项目
引入lombok和web包
Copyright © 2015 Theme used GitHub CSS. 访问人/ 次