携手创作,共同成长!这是我参与「掘金日新计划 · 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模块实现通讯
安装
通过apt-get
安装libzmq这个核心包,若未安装核心包,会导致zeromq的golang模块无法成功安装
- 安装
libzmq
apt-get install libzmq3-dev
- 安装
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)