confluent-kafka-go依赖库编译体验优化

问题描述:

​ 在项目中使用了go的kafka库confluent-kafka-go,go run运行正常。因为开发环境是MacOS,部署环境是基于centos的docker镜像使用二进制运行,在使用env GOOS=linux GOARCH=amd64 go build -o ./main ./main.go交叉编译时却报错了。

​ 经过查询在TonyBai老师的文章中找到了答案。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ETVt8Z5T-1668651263858)(/Users/vince/Library/Application Support/typora-user-images/image-20221116102701545.png)]

但是对于我的机器,似乎开启CGO_ENABLED都不生效。
在这里插入图片描述

解决方案

为了避免环境的影响以及本机安装依赖库的繁琐,选择了通过在docker镜像进行打包来规避。以下为操作步骤:

1:编写Dockerfile文件

在项目同级目录编写Dockerfile文件,以本人项目business-product-sync为例,基于golang:1.16镜像,参考如下:

FROM golang:1.16

LABEL AUTHOR vince@hyx.com

RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

ADD ./business-product-sync /go/src/business-product-sync/

CMD cd business-product-sync
CMD go env -w GOPROXY=https://mirrors.aliyun.com/goproxy/,direct
CMD go env -w GOPRIVATE=gogs.miz.so
CMD go mod tidy
2:运行Docker镜像
docker build  -t business-product-sync:v0.15 .
docker run --rm -it business-product-sync:v0.15  bash
3:进入镜像进行编译
CMD CGO_ENABLED=1 GOOS=linux GOARCH=amd64  go build  -tags  netgo -o ./main ./main.go

这里因为比较消耗资源,可以适当将docker的占用CPU和内存调大,否则镜像会挂。

4:将编译成功的二进制文件复制到本机

使用docker cp命令将镜像中的生成二进制文件复制到本机

docker cp fdc68fb3d2fe:/go/src/business-product-sync/main

以上操作完成基本就完成了整个的编译过程了。

参考地址

Cross-compilation support:https://github.com/confluentinc/confluent-kafka-go/issues/119
Go社区主流Kakfa客户端简要对比:https://tonybai.com/2022/03/28/the-comparison-of-the-go-community-leading-kakfa-clients/

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

电商架构修炼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值