在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 登陆查看效果

Read more   2019/4/28 posted in  任务调度 三分钟系列

项目排期工具OmniPlan实用指南

官方文档:

  1. https://support.omnigroup.com/doc-assets/OmniPlan-Mac/OmniPlan-Mac-v3.0.0.1/zh/EPUB/xhtml/03_tutorial.xhtml
  2. https://support.omnigroup.com/documentation/omniplan/mac/3.0/zh/

官方文档虽然很全,但是不太容易快速上手,按照下面的步骤可以快速上手这个软件,官方文档在需要的时候可以花时间去研究

选择模版

软件内置4个模版(排期1是我加的,忽略)

目前在使用的是第二个 “自动调整计划” 这个模版,这个模版可以累加排期时间,一般选这个就可以了

Read more   2019/4/27 posted in  项目管理

基于顺丰同城接口编写sdk,java三方sdk编写思路

由于公司外卖业务需要用到顺丰的配送体系,技术上需要对接顺丰
个人比较感兴趣,但是顺丰没有提供sdk,所以研究下自己写了一个

完整代码已上传github 🎉:https://github.com/neatlife/spring-boot-sfcity

技术选型

三方sdk编写有两种实现方式

  1. 不依赖框架,更通用,但是集成成本较高
  2. 依赖框架,比如spring boot,这样使用起来效率更高

为了提高使用效率,这里选择基于spring boot框架进行编写

前期准备

有很多基于spring boot的sdk了,骨架就不需要自行搭建了,找了下面几个进行参考

  1. https://github.com/jibaole/spring-boot-starter-alimq
  2. https://github.com/spring-projects/spring-data-redis

研究api文档

顺丰同城api文档地址:http://commit-openic.sf-express.com/open/api/docs/index#/apidoc

目前顺丰同城的开发者api个人可以注册,注册后可以设置回调地址
image-20190425171710542

Read more   2019/4/26 posted in  Spring Boot

订单系统设计,消息队列幂等处理思路

技术栈

  1. spring boot 作为基础框架
  2. 阿里云rocketmq作为消息队列,处理延迟,分区,无序消息
  3. 使用了阿里云消息队列的spring boot库spring-boot-starter-alimq

订单系统在整个系统里的作用

  1. app: app作为下单入口,在app端生成订单后,通过消息队列传递到订单系统里生成订单
  2. 推送到店:订单系统生成完成订单后,将把订单发送到门店进行餐品制作,通过http调用推送到店里,店里的收银机等设备根据订单状态打印小票,标签,制作餐品等
  3. 店里将订单制作完成后,将把订单制作完成的状态回传订单系统

系统核心部分交互流程图
订单系统交互流程图

Read more   2019/4/24 posted in  业务

基于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
Read more   2019/4/24 posted in  Spring Boot

hystrix对比服务网格istio的destinationrule

使用难度

hystrix

每个项目都需要引入hystrix包,或者在框架里引入,并且官方仅支持java

<!-- https://mvnrepository.com/artifact/com.netflix.hystrix/hystrix-core -->
<dependency>
    <groupId>com.netflix.hystrix</groupId>
    <artifactId>hystrix-core</artifactId>
    <version>1.5.18</version>
</dependency>
Read more   2019/4/23 posted in  SERVICE MESH

服务网格应用istio上线流程[Service Mesh]

istio典型应用上线步骤分为3步

  1. 将应用打包成docker镜像,并使用istioctl部署到k8s集群上
  2. 制作路由规则,指定选择器,进行流量过滤,指定熔断规则等
  3. 制作网关选择网关服务进行暴露一般是网关服务,内部服务不需要

部署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
Read more   2019/4/22 posted in  SERVICE MESH

阿里云ons队列监控api深度使用

文档地址:

  1. https://help.aliyun.com/document_detail/29597.html
  2. https://help.aliyun.com/document_detail/44419.html

拿获取 查询消费堆积 这个关键监控接口举例

创建项目并引入监控包和客户端包

创建spring boot项目

引入lombok和web包

Read more   2019/4/18 posted in  监控 消息队列

k8s分布式存储,使用rancher将jenkins workspace部署在nfs上

安装nfs服务器

systemctl stop rpcbind.socket
systemctl stop rpcbind
systemctl disable rpcbind.socket 
systemctl disable rpcbind

mkdir -p ~/nfs/files
chmod -R 777 ~/nfs/files
echo "/files *(rw,sync,no_subtree_check,fsid=0,no_root_squash)" > ~/nfs/exports.txt

docker run --name nfs -d --rm\
  -v ~/nfs/files:/files\
  -v ~/nfs/exports.txt:/etc/exports:ro\
  --cap-add SYS_ADMIN\
  -p 2049:2049   -p 2049:2049/udp   \
  -p 111:111     -p 111:111/udp     \
  -p 32765:32765 -p 32765:32765/udp \
  -p 32767:32767 -p 32767:32767/udp \
  erichough/nfs-server

使用showmount命令查看效果

Read more   2019/4/15 posted in  OPS

docker-elk配置sentinl插件发送钉钉告警

安装elk

下载elk docker工具包并启动 elk 6.6.1

https://github.com/deviantony/docker-elk.git
cd docker-elk && git checkout 366e2bc

修改docker-compose.yml挂载kibana插件目录

vim docker-compose.yml

kibana:
  build:
    context: kibana/
    args:
      ELK_VERSION: $ELK_VERSION
  volumes:
    - ./kibana/config/:/usr/share/kibana/config:ro
    - ./kibana/plugins:/usr/share/kibana/plugins
  ports:
    - "5601:5601"
  networks:
    - elk
  depends_on:
    - elasticsearch

启动elk

docker-compose up -d
Read more   2019/4/14 posted in  监控

java微服务 k8s生产环境搭建

整理了好久,来一波干货😄🎉

准备k8s集群机器

一台k8s部署机(堡垒机) 1G以上
3台k8s master节点机器 2c4G以上
3台k8s node节点机器 2c4G以上

为以上7台机器全部分配固定ip

机器 ip
K8s-ha-master1 172.16.67.130
K8s-ha-master2 172.16.67.131
K8s-ha-master3 172.16.67.132
K8s-ha-node1 172.16.67.135
K8s-ha-node2 172.16.67.136
K8s-ha-node3 172.16.67.137
K8s-ha-deploy 172.16.67.140
安装k8s集群
Read more   2019/4/12 posted in  JAVA

java ci/cd环境搭建

最近搭建了一套java的ci/cd环境,记录下搭建过程😀

注:下面演示软件安装在/opt

准备一台机器,内存8G以上 系统版本centos 7

Read more   2019/4/11 posted in  CI/CD