Golang之ZeroMQ基础使用

694 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第5天,点击查看活动详情

ZeroMQ是服务端使用C++语言开发异步消息传递库,可用于网络通讯、消息的发布与订阅,于2010立项,2014年发布第一个预览版本4.1.0,具有多平台部署支持(Windows、CentOS、Ubuntu等主流平台),多语言客户端支持(Golang、Java、Python等主流语言)这一跨平台特性,同时,和大多数消息队列一样,具有良好的分布式支持。

初次接触ZeroMQ时,需要注意的一点是ZeroMQ并不像传统MQ一样直接提供用户一个可部署的服务端程序,而是需要用户通过libzmq来封装核心的方法,再通过客户端程序远程调用服务端提供的服务。

本文将从以下几个方面阐述如何部署和使用ZeroMQ(说明:本文的服务端、客户端的测试代码均处于Debian环境中):

  • Debian安装ZeroMQ

  • Golang模块安装

  • 基于Golang模块实现通讯

官方文档:zeromq.org/get-started…

安装

通过apt-get安装libzmq这个核心包,若未安装核心包,会导致zeromq的golang模块无法成功安装

  1. 安装 libzmq
apt-get install libzmq3-dev
  1. 安装 pkg-config
apt-get install pkg-config

golang 模块安装

zmq4实现了zeromq 接口,通过zmq4可以使用golang对zeromq的数据进行操作

go get github.com/pebbe/zmq4

基于golang 模块实现通讯

服务端程序

// 获取 zeromq 上下文对象
zctx, _ := zmq.NewContext()
// 获取 套接字对象
s, _ := zctx.NewSocket(zmq.REP)
// 监听 5000 端口
s.Bind("tcp://*:5000")

for {
   // 接受客户端发送的数据
   msg, _ := s.Recv(0)
   log.Printf("Data %s\n", msg)
   
   // 返回给客户端数据 Hello World
   s.Send("Hello World", 0)
}

客户端程序

// 获取 zeromq 上下文对象
zctx, _ := zmq.NewContext()
// 获取 套接字对象
s, _ := zctx.NewSocket(zmq.REQ)
// 连接远程服务
s.Connect("tcp://127.0.0.1:5000")

// 向服务端发送数据
s.Send("Hello", 0)
// 从服务端接受响应
msg, _ := s.Recv(0)
fmt.Printf("Data %s\n", msg)