# zmq-learn
**Repository Path**: leaning-limitless/zmq-learn
## Basic Information
- **Project Name**: zmq-learn
- **Description**: zmq学习记录
- **Primary Language**: Java
- **License**: Not specified
- **Default Branch**: dev
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 2
- **Forks**: 2
- **Created**: 2019-12-20
- **Last Updated**: 2024-07-29
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 本介绍基于以下依赖
```
org.zeromq
jeromq
0.5.1
```
# 参考文档
[ZMQ官方使用指南](http://zguide.zeromq.org/page:all#top)
[ZMQ官方使用指南中文翻译](https://gitee.com/solym/ZeroMQ-Guide-Zh)
[ZMQ官方API文档socket](http://api.zeromq.org/4-0:zmq-socket)
[ZMQ官方API文档socketopt](http://api.zeromq.org/master:zmq-setsockopt)
[ZMQsocketopt中文翻译](https://www.cnblogs.com/fengbohello/p/4398953.html)
[jeromq的源码](https://github.com/booksbyus/zguide)
[jeromq的javadoc](https://www.javadoc.io/doc/org.zeromq/jeromq/latest/org/zeromq/ZMQ.Socket.html)
## 术语
high water mark: 高水位标志,接收或发送消息的缓冲区大小可通过Socket::setRcvHWM和Socket::setSndHWM设置。(各种socket option的含义参考前面给的链接中的文档)
mute state: 静音状态 ,一般是指某个端点无法发送消息的状态,可能是因为没有与之连接的接收方,也可能是因为接收方由于某些原因无法继续接收消息。
# 消息模式
## 请求-回复模式
请求回复模式适用于客户端向服务端发送请求,然后每一个请求都会收到服务端的回复的场景。
[ZMQ rfc/spec28 ](http://rfc.zeromq.org/spec:28)
### 代码样例
https://gitee.com/toosimple-naive/zmq-learn/tree/dev/zmq/src/main/java/com/learn/zmq/repreq
### 包含的stocket type
ZMQ.REQ, ZMQ.REP, ZMQ.DEALER, ZMQ.ROUTER
#### ZMQ_REQ
ZMQ_REQ 类型的socket 用于向服务端发送请求并接收回复消息。
只能先发消息后收消息,发出的请求会以round-robin方式分配给不同的服务端节点。
没有服务可用时,发送操作会阻塞,直到至少一个服务可用。
ZMQ_REQ 类型的socket不丢弃消息。
ZMQ_REQ 特征 |
Compatible peer sockets |
ZMQ_REP, ZMQ_ROUTER |
Direction |
Bidirectional |
Send/receive pattern |
Send, Receive, Send, Receive, … |
Outgoing routing strategy |
Round-robin |
Incoming routing strategy |
Last peer |
Action in mute state |
Block |
#### ZMQ_REP
ZMQ_REP 特征 |
Compatible peer sockets |
ZMQ_REQ, ZMQ_DEALER |
Direction |
Bidirectional |
Send/receive pattern |
Receive, Send, Receive, Send, … |
Incoming routing strategy |
Fair-queued |
Outgoing routing strategy |
Last peer |
#### ZMQ_DEALER
ZMQ_DEALER 特征 |
Compatible peer sockets |
ZMQ_ROUTER, ZMQ_REP, ZMQ_DEALER |
Direction |
Bidirectional |
Send/receive pattern |
Unrestricted |
Outgoing routing strategy |
Round-robin |
Incoming routing strategy |
Fair-queued |
Action in mute state |
Block |
#### ZMQ_ROUTER
ZMQ_ROUTER 特征 |
Compatible peer sockets |
ZMQ_DEALER, ZMQ_REQ, ZMQ_ROUTER |
Direction |
Bidirectional |
Send/receive pattern |
Unrestricted |
Outgoing routing strategy |
See text |
Incoming routing strategy |
Fair-queued |
Action in mute state |
Drop |
## 发布-订阅模式
发布订阅模式适用于一个发布者向多个订阅者发布消息的场景。
[ZMQ rfc/spec29 ](http://rfc.zeromq.org/spec:29)
### 代码样例
https://gitee.com/toosimple-naive/zmq-learn/tree/dev/zmq/src/main/java/com/learn/zmq/pubsub
### 包含的stocket type
ZMQ.SUB, ZMQ.PUB, ZMQ.XSUB, ZMQ.XPUB
#### ZMQ_PUB
ZMQ_PUB 特征 |
Compatible peer sockets |
ZMQ_SUB, ZMQ_XSUB |
Direction |
Unidirectional |
Send/receive pattern |
Send only |
Incoming routing strategy |
N/A |
Outgoing routing strategy |
Fan out |
Action in mute state |
Drop |
#### ZMQ_SUB
ZMQ_SUB 特征 |
Compatible peer sockets |
ZMQ_PUB, ZMQ_XPUB |
Direction |
Unidirectional |
Send/receive pattern |
Receive only |
Incoming routing strategy |
Fair-queued |
Outgoing routing strategy |
N/A |
#### ZMQ_XPUB
ZMQ_XPUB 特征 |
Compatible peer sockets |
ZMQ_SUB, ZMQ_XSUB |
Direction |
Unidirectional |
Send/receive pattern |
Send messages, receive subscriptions |
Incoming routing strategy |
N/A |
Outgoing routing strategy |
Fan out |
Action in mute state |
Drop |
#### ZMQ_XSUB
ZMQ_XSUB 特征 |
Compatible peer sockets |
ZMQ_PUB, ZMQ_XPUB |
Direction |
Unidirectional |
Send/receive pattern |
Receive messages, send subscriptions |
Incoming routing strategy |
Fair-queued |
Outgoing routing strategy |
N/A |
Action in mute state |
Drop |
## 管道模式
管道模式适用于向组织在一个管道中的所有节点发布数据的场景。管道的每一段都连接到至少一个节点,并且当有多个节点连接到同一个管道时,数据是以round-robin方式发送给这些节点的。
[ZMQ rfc/spec30 ](http://rfc.zeromq.org/spec:30)
### 代码样例
https://gitee.com/toosimple-naive/zmq-learn/tree/dev/zmq/src/main/java/com/learn/zmq/pipeline
### 包含的stocket type
ZMQ.PUSH, ZMQ.PULL
#### ZMQ_PUSH
ZMQ_PUSH 特征 |
Compatible peer sockets |
ZMQ_PULL |
Direction |
Unidirectional |
Send/receive pattern |
Send only |
Incoming routing strategy |
N/A |
Outgoing routing strategy |
Round-robin |
Action in mute state |
Block |
#### ZMQ_PULL
ZMQ_PULL 特征 |
Compatible peer sockets |
ZMQ_PUSH |
Direction |
Unidirectional |
Send/receive pattern |
Receive only |
Incoming routing strategy |
Fair-queued |
Outgoing routing strategy |
N/A |
Action in mute state |
Block |
## 排他结对模式
排他结对模式适用于要实现精确的端到端连接的场景。
[ZMQ rfc/spec31 ](http://rfc.zeromq.org/spec:31)
### 代码样例
https://gitee.com/toosimple-naive/zmq-learn/tree/dev/zmq/src/main/java/com/learn/zmq/pair
### 包含的stocket type
ZMQ.PAIR
#### ZMQ_PAIR
ZMQ_PAIR 特征 |
Compatible peer sockets |
ZMQ_PAIR |
Direction |
Bidirectional |
Send/receive pattern |
Unrestricted |
Incoming routing strategy |
N/A |
Outgoing routing strategy |
N/A |
Action in mute state |
Block |
## 原生模式
原生模式适用于和TCP端点通信的场景,允许双向的异步请求和回复。
### 代码样例
https://gitee.com/toosimple-naive/zmq-learn/tree/dev/zmq/src/main/java/com/learn/zmq/stream
### 包含的stocket type
ZMQ.STREAM
#### ZMQ_STREAM
ZMQ_STREAM 特征 |
Compatible peer sockets |
none. |
Direction |
Bidirectional |
Send/receive pattern |
Unrestricted |
Outgoing routing strategy |
See text |
Incoming routing strategy |
Fair-queued |
Action in mute state |
EAGAIN |