惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Attack and Defense Labs
Attack and Defense Labs
The GitHub Blog
The GitHub Blog
C
Check Point Blog
博客园_首页
MongoDB | Blog
MongoDB | Blog
N
Netflix TechBlog - Medium
F
Full Disclosure
Microsoft Security Blog
Microsoft Security Blog
爱范儿
爱范儿
Recent Announcements
Recent Announcements
阮一峰的网络日志
阮一峰的网络日志
G
GRAHAM CLULEY
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
T
Threat Research - Cisco Blogs
C
Cybersecurity and Infrastructure Security Agency CISA
V
Vulnerabilities – Threatpost
K
Kaspersky official blog
博客园 - 司徒正美
S
Schneier on Security
T
The Exploit Database - CXSecurity.com
Project Zero
Project Zero
云风的 BLOG
云风的 BLOG
Cisco Talos Blog
Cisco Talos Blog
Know Your Adversary
Know Your Adversary
雷峰网
雷峰网
V
V2EX - 技术
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Spread Privacy
Spread Privacy
罗磊的独立博客
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
S
Security Affairs
SecWiki News
SecWiki News
Schneier on Security
Schneier on Security
O
OpenAI News
Jina AI
Jina AI
PCI Perspectives
PCI Perspectives
Cyberwarzone
Cyberwarzone
Y
Y Combinator Blog
Apple Machine Learning Research
Apple Machine Learning Research
B
Blog RSS Feed
I
InfoQ
D
Docker
P
Palo Alto Networks Blog
Recorded Future
Recorded Future
M
MIT News - Artificial intelligence
博客园 - Franky
B
Blog
Scott Helme
Scott Helme
博客园 - 叶小钗
D
DataBreaches.Net

博客园 - 水色天空

用docfx生成c#项目API的简洁教程 wpf datagrid鼠标穿透 OxyPloot设置X轴时间DateTimeAxis WPF中MVVM模式下ComboBox绑定,无法更新selectedItem的解决方案 WPF设置DatePicker日期格式之卡Bug大法 WPF程序自动重启 InstallShield打包.net项目无法包含数据库、配置文件等 handycontrol中NumericUpDown无法显示自定义错误提示的解决办法 DataGrid代码生成列居中问题 Chapter 2 - Sockets and Patterns【选译,哈哈】 Part 9 High-Water Marks Chapter 2 - Sockets and Patterns【选译,哈哈】 Part 9 Missing Message Problem Solver Chapter 2 - Sockets and Patterns【选译,哈哈】 Part 9 Zero-Copy Chapter 2 - Sockets and Patterns【选译,哈哈】 Part 8 Node Coordination Chapter 2 - Sockets and Patterns【选译,哈哈】 Part 6 Multithreading with ZeroMQ - 水色天空 Chapter 2 - Sockets and Patterns【选译,哈哈】 Part 7 Signaling Between Threads (PAIR Sockets) Chapter 2 - Sockets and Patterns【选译,哈哈】 Part 5 Handling Interrupt Signals - 水色天空 WPF绑定RadioButton的标准做法 解决.net reactor加密后的dll,在其它电脑无法运行的问题 函数返回值的一些规则
Chapter 2 - Sockets and Patterns【选译,哈哈】 Part 4 Handling Errors and ETERM
水色天空 · 2021-09-20 · via 博客园 - 水色天空

Handling Errors and ETERM

ZeroMQ的错误处理理念是快速失败和弹性的结合。我们认为,流程应该尽可能容易受到内部错误的攻击,并尽可能健壮地抵御外部攻击和错误。打个比方,如果一个活细胞检测到一个内部错误,它就会自我毁灭,但它会用一切可能的手段抵抗来自外部的攻击。

当ZeroMQ检测到外部错误时,它会向调用代码返回一个错误。在一些罕见的情况下,如果没有明显的从错误中恢复的策略,它会安静地丢弃消息。

有一些简单的规则,从POSIX约定开始:

Methods that create objects return NULL if they fail.

Methods that process data may return the number of bytes processed, or -1 on an error or failure.

Other methods return 0 on success and -1 on an error or failure.

The error code is provided in errno or zmq_errno().

A descriptive error text for logging is provided by zmq_strerror(). zmq_strerror()提供了用于日志记录的描述性错误文本。

有两个主要的异常情况,你应该作为非致命的处理:

当代码接收到带有ZMQ_DONTWAIT选项的消息且没有等待数据时,ZeroMQ将返回-1并将errno设置为EAGAIN。

当一个线程调用zmq_ctx_destroy(),而其他线程仍在执行阻塞工作时,zmq_ctx_destroy()调用关闭上下文,所有阻塞调用以-1退出,errno设置为ETERM。

让我们看看如何干净利落地关闭进程。我们将采用上一节中的并行管道示例。如果我们在后台启动了大量的worker,我们现在想要在批量完成后杀死他们。我们可以通过给worker发个kill消息来实现。这样做最好的地方是sink,因为它真的知道批次何时完成。

我们怎么把sink和worker联系起来?PUSH/PULL套接字只是单向的。我们可以切换到另一种套接字类型,或者可以混合多个套接字流。让我们尝试后一种方法:使用pub-sub模型向worker发送kill消息:

 1. sink在新端点上创建一个PUB套接字。

 2. worker将他们的输入套接字连接到这个端点。

 3. 当sink检测到批处理结束时,它向其PUB套接字发送一个kill。

 4. 当一个worker检测到这个kill消息时,它退出。