- 博客(9)
- 收藏
- 关注
原创 GoMicro学习笔记 简易搭建go micro服务并使用http形式请求这个服务
启动go micro服务创建好项目后,使用go mod init <项目名>生成一个go.mod文件获取micro工具包go get github.com/micro/micro获取protoc-gen-go(通过此可以直接生成go语言对应的编译代码)go get github.com/micro/protobuf/{proto,protoc-gen-go}启动Consul(使用consul作为注册中心注册所有服务)docker run consul编写greeter.pr
2020-12-30 17:17:10 622
原创 GoMicro学习笔记 Micro和GoMicro
Micro是运行时工具集,而GoMicro则是后端服务框架。Micro如下图所示,micro类似于中间层的作用,手机,web等通过micro中相应的API,BOT,WEB等工具,调用gomicro框架中的服务Micro Api主要功能在于将http请求转向到内部服务。即通过Micro Api将内部服务暴露给外部http请求。 Micro Proxy可以让服务客户端直接调用服务。与Mirco API不同的是,api主要是将rpc转成http形式给外部,而proxy则是只能使用rpc形式Go.
2020-12-27 21:34:37 297
原创 TCP/IP随笔 http和tcp的区别
简单来说,通常情况下http是基于tcp的。tpc是传输层的,而http是应用层的。tcp的优势在于长连接,即三次握手之后,理想情况下,除非一方主动关闭连接(四次挥手),tcp连接将一直持续下去(其中可能会受到防火墙等因素的干扰而关闭)。http是短连接,在已建立tcp连接的基础上,使用“请求—响应”的方式进行数据交换。http需要客户端向服务器发出请求后,服务器端才能回复数据。此外,应用层使用套接字(socket)将数据传递给传输层,并进一步使用传输层进行数据通信。参考:HTTP与TCP的区.
2020-12-27 16:30:49 142
原创 Go学习笔记 Context上下文
什么是上下文Context 也叫作“上下文”,是一个比较抽象的概念,一般理解为程序单元的一个运行状态、现场、快照。其中上下是指存在上下层的传递,上会把内容传递给下,程序单元则指的是 Goroutine。每个 Goroutine 在执行之前,都要先知道程序当前的执行状态,通常将这些执行状态封装在一个 Context 变量中,传递给要执行的 Goroutine 中。(个人理解为goroutine运行时的环境)Context的结构type Context interface { // 返回该上下
2020-12-25 18:10:40 288
原创 Go学习笔记 值拷贝和引用拷贝
只有map,slice,chan是引用类型,其拷贝为引用拷贝值拷贝package main import "fmt" func modify(a [3]int) { a[0] = 4 } func main() { a := [3]int{1, 2, 3} modify(a) fmt.Println(a) }这种情况是值拷贝,返回[1, 2, 3]引用拷贝func main() { a := make([]i
2020-12-23 15:34:58 698
原创 RocketMQ学习笔记 发送消息和消费消息
RocketMQ发送的消息分为普通消息,顺序消息,事务消息,延时消息四种普通消息的发送方式又分为同步(Sync)发送、异步(Async)发送和单向(Oneway)发送其中同步发送如图异步发送单向发送因为rocketmq的异步是开了一个线程去做的,而php是单线程的,所以目前的php rocketmq的示例sdk是同步发送的普通消息的情况下,不能保证消息的消费先后顺序。集群消费会将消息平均分配给同集群下的所有消费者。如果消费者没有消费消息,会导致消息一直处于未消..
2020-12-13 20:14:45 481
原创 RocketMQ学习笔记 名词解释
rocketMQ中,主要使用topic和tag对消息进行分类。其中,topic是一级分类,而tag是进一步的二级分类。每个Topic下会由一到多个队列来存储消息一个group下能有多个consumer。每个consumer生产或消费同一类消息,且消息发布或订阅的逻辑一致集群消费一个Group ID所标识的所有Consumer平均分摊消费消息。例如某个Topic有9条消息,一个Group ID有3个Consumer实例,那么在集群消费模式下每个实例平均分摊,只消费其中的3条消息。广播消费一个Gr.
2020-12-13 17:54:56 316
原创 Go语言学习笔记 利用cron执行定时脚本
import "github.com/robfig/cron"func main() { // 启动一个gorutine执行定时脚本 go func() { // 定时脚本 global.AppLog.Info("Starting FillBillCycle...") c := cron.New() // 新建一个定时任务对象 c.AddFunc("20 */2 * * * *", func() { Cycle() }) // 给对象增加定时任务 c.St.
2020-12-12 19:02:24 312
原创 Go语言学习笔记 grom追加事务
// 开始事务tx := db.Begin()// 在事务中做一些数据库操作(从这一点使用'tx',而不是'db')tx.Create(...)// ...// 发生错误时回滚事务tx.Rollback()// 或提交事务tx.Commit()基于grom,go中如何接收错误并回滚func test() (finErr error) { // 开启事务 tx := db.Begin() global.AppLog.Info("Begin Transaction...")
2020-12-12 18:43:20 272
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人