Mac 通过 Docker 安装 RocketMQ 安装 安装好 docker 之后,在 mac 上新建目录 12345678mkdir /Users/gyl/docker/rocketmq/datacd /Users/gyl/docker/rocketmq/datamkdir logs mkdir storemkdir -p broker/conf mkdir -p broker/logs mkdir -p broker/storevim 2022-01-28 RocketMQ Docker RocketMQ
Go 库存扣减的几种实现 Go 库存扣减的几种实现方法Go Mutex 实现 这里使用了 grpc、proto、gorm、zap、go-redis、go-redsync 等 package 123456789101112131415161718192021222324252627282930var m sync.Mutexfunc (*InventoryServer) LockSell(ctx context.Conte 2022-01-17 Go
TCP 粘包 什么是 TCP 粘包 粘包问题是指当发送两条消息时,比如发送了 ABC 和 DEF,但另一端接收到的却是 ABCD,像这种一次性读取了两条数据的情况就叫做粘包(正常情况应该是一条一条读取的),正确读取 ABC 和 DEF 两条信息。 当发送的消息是 ABC 时,另一端却接收到的是 AB 和 C 两条信息,像这种情况就叫做半包。 为什么会有粘包和半包? 这是因为 TCP 是面向连接的传输协议,TC 2021-12-17 TCP socket
基于 Docker 的 pubsub 包实现的gRPC的发布与订阅 基于 Docker 的 pubsub 包实现的 gRPC 的发布与订阅1. 创建对应的文件和目录1234567mkdir pubsubcd pubsubgo mod init pubsubmkdir proto publisher subscribetouch server.go 2. 创建 proto 文件12cd prototouch pubsub.proto pubsub.proto 2021-11-22 Go
Go 微服务可用性设计 Go 微服务可用性设计知识点隔离服务隔离动静隔离如 CND 缓存加速、mysql LRU 算法改进 业务可以拆成两张表,静态表(字段机会不会改)和动态表(字段经常改) 读写隔离 主从 CQRS 轻重隔离 核心:服务按核心与否进行分离,越核心的服务可用性要求也高 快慢 热点 小表广播: 存为到内存,定期更新 主动预热:旁路预热 物理隔离 线程:使用线程池,不同业务逻辑用不同的池子 进程:容器 2021-11-17 Go
Go goroutine 并发编程 对自己创建的 goroutine 负责 请将是否异步调用的选择权交给调用者,不然很有可能大家并不知道你在这个函数里面使用了 goroutine 如果你要启动一个 goroutine 请对它负责 永远不要启动一个你无法控制它退出,或者你无法知道它何时推出的 goroutine 启动 goroutine 时请加上 panic recovery 机制,避免服务直接不可用 造成 goroutine 泄漏的 2021-11-12 Go
Go error panic or error 在 Go 中 panic 会导致程序直接退出,是一个致命的错误,如果使用 panic recover 进行处理的话,会存在很多问题 性能问题,频繁 panic recover 性能不好 容易导致程序异常退出,只要有一个地方没有处理到就会导致程序进程整个退出 不可控,一旦 panic 就将处理逻辑移交给了外部,我们并不能预设外部包一定会进行处理 什么时候使用 pan 2021-10-27 Go
Go 错误处理 Panic 和 Recover Go 错误处理 Panic 和 Recover Go 中没有错误机制 error 类型实现了 error 接口 123type error interface { Error() string} 可以通过 errors.New 来实现快速创建错误信息 1errors.New("n must be in the range [0,10] Panic 的基本定义 2021-10-20 Go
Go 函数 Go 函数函数声明 关键字 func 用来声明一个函数 函数可以有一个或者多个参数,每个参数后面带有不同的类型,通过,分隔 函数可以返回多个值 如果只有一个返回值且不声明返回值变量,那么你可以省略 包括返回值 的括号 如果没有返回值,那么就直接省略最后的返回信息 如果有返回值, 那么必须在函数的外层添加 return 语句 所有的参数都是值传递: slice, map, channel 会有传引用 2021-10-20 Go
Go 面向对象 Go 面向对象实例创建及初始化 基本使用 123456789101112131415161718type Employee struct { Id int Name string Age int}e := Employee{"0", "Bob", 20}e1 := Employee{name: &q 2021-10-20 Go