GO 生成特定长度的随机数
前记
最近在用 Go
做一个小程序,需要生成一个 6
位数随机验证码,遂记录一下实现
实现
Go
生成特定长度的随机数
1 | package main |
最近在用 Go
做一个小程序,需要生成一个 6
位数随机验证码,遂记录一下实现
Go
生成特定长度的随机数
1 | package main |
用 Colima
也已经大半年了,作为 Docker Desktop
的替代者用起来还是觉得不错的
目前最新版 0.4.2
这里只以 Homebrew
为例
1 | brew install colima |
大概有如下依赖
1 | dependencies for colima: gdbm, ca-certificates, openssl@1.1, sqlite, python@3.9, glib, libtool, guile, nettle, libnghttp2, unbound, gnutls, libslirp, libusb, qemu and lima |
删除现有的 VM
实例
1 | colima delete |
Homebrew
更新
1 | brew update |
start
1 | colima start |
使用这块可以参考官方文档,底层的 runtime
默认是 Docker
以 kubernetes
为例,需要先安装 kubectl
1 | brew install kubectl |
然后再启动 colima
1 | colima start --with-kubernetes |
查看状态
1 | colima status |
最近在用 gin
开发一款小程序后端需要用到小程序登陆授权,看看如何实现
核心代码实现,这里主要是利用了 silenceper/wechat
包
InitWechat
函数主要是初始化 Wechat
同时去设置缓存
MiniProgramLogin
函数主要是去调用 Code2Session
进行授权,同时将 code
换成 session
1 | package utils |
小程序需要调用 wx.login
获取到 code
1 | App({ |
1 | utils.MiniProgramLogin(c, code) |
c
为 gin
上下文对象 *gin.Context
code
为前端传入小程序 wx.login
获取到的 code
纵有千古,横有八荒;前途似海,来日方长。
这种方式打包环境和运行环境都在同一个 Golang
底层镜像中
1 | FROM golang:1.17-alpine |
这种方式可以把编译环境和运行环境进行分割,极大的减小了运行镜像的大小
1 | #----------build----------# |
俗世洪流,站得住脚已是千辛万苦,想要出人头地,恐怕比登天还难。
最近在做监控 Spring Boot /actuator/health
的时候,总是会出现一些莫名其妙的网络超时中断,于是想到了用重试机制来进行重试请求。
下面看看 Python
的第三方库 Tenacity
1 | pip install Tenacity |
1 | import requests |
输出:
1 | Start Try 1 |
上面示例中,设定超时为 3s
请求却 sleep=5000
此请求必然会超时
tenacity
只要遇见 raise
就会触发重试,上面代码中 requests
底层已经 raise
,所以即使 main
函数中没有 raise
依然会重试
Celery
是一个基于 Python
开发的分布式异步消息任务队列,通过它可以轻松的实现任务的异步处理
看看如何 Celery
跟 Sanic
一起使用
使用的组件
1 | sanic==21.12.1 |
tasks/task.py
1 | import time |
server.py
1 | from sanic import Sanic |
worker.py
1 | from tasks.task import app |
运行 worker
进程
1 | celery -A worker:app worker --loglevel=info --concurrency=1 |
Flower
是基于 web 的监控和管理 Celery
的工具
使用
1 | celery --broker=redis://127.0.0.1:6379/0 flower --port=5566 |
升级前明确升级路线
参考
利用 gitlab-backup
命令进行备份
1 | docker exec -t <container name> gitlab-backup create |
复制备份至宿主机
1 | cd ~/gitlab/backups |
停止现有容器
1 | docker stop <container name> |
删除现有容器
1 | docker rm <container name> |
拉取新的容器镜像
1 | docker pull gitlab/gitlab-ce:13.12.15-ce.0 |
启动新的容器
1 | docker-compose -f gitlab.yml up -d |
docker-compose
配置如下
1 | web: |
1 | wget --no-check-certificate https://dlcdn.apache.org/kafka/3.0.0/kafka_2.13-3.0.0.tgz |
配置参数前假设我们的节点为:10.200.128.106
配置文件路径:config/kraft/server.properties
1 | # 节点角色 |
还有很多参数就不一一列举了
1 | # bin/kafka-storage.sh random-uuid |
如果是集群应在每台机器上运行格式化命令,并且应该使用同一集群 ID
1 | # bin/kafka-storage.sh format -t VV7Jb8bWT-Oz_F99BNXvAQ -c ./config/kraft/server.properties |
1 | bin/kafka-server-start.sh ./config/kraft/server.properties |
也可以加上 -daemon
实现后台守护
1 | bin/kafka-server-stop.sh stop |
1 | # bin/kafka-topics.sh --create --partitions 1 --replication-factor 1 --topic topic-name --bootstrap-server 10.200.128.106:9092 |
1 | bin/kafka-console-producer.sh --topic topic-name --bootstrap-server 10.200.128.106:9092 |
可以按 Ctrl+C
结束生产者进程
1 | # bin/kafka-console-consumer.sh --topic topic-name --from-beginning --bootstrap-server 10.200.128.106:9092 |
可以按 Ctrl+C
结束消费者进程
1 | [Composer\Downloader\TransportException] |
把 composer.lock
文件删除,重新执行 composer install