有没有办法让ZeroMQ在一个套接字上处理所有进出消息模式?

2 投票
1 回答
1474 浏览
提问于 2025-04-17 18:23

Zmq(ZeroMQ)非常快,但每两个方向的连接都需要一对插座(socket),而且每种连接类型(比如请求-响应和发布-订阅等)在每一端都要有,这对于复杂的架构来说真是麻烦。因此,出现了一个“代理”(broker)的概念。

代理插座可以有多个通道(比如说命名连接的抽象),这样就能提供不同的模式类型封装。也就是说,如果能在每台机器上只打开一个插座,使用一个端口,同时处理所有的功能(比如发布-订阅、请求-响应等),那就太好了。

有没有办法用zmq或者它的一些扩展来实现这样的功能呢?

1 个回答

1

你不能用同一个ZMQ套接字同时进行发布/订阅(PUB/SUB)和请求/回复(REQ/REP),这样是行不通的。不过,你可以把逻辑封装在一个组件里,至少可以使用ZMQ.Poller来接收不同类型套接字发来的消息。下面是一个Python的例子,希望对你有帮助...

https://github.com/imatix/zguide/blob/master/examples/Python/mspoller.py

顺便说一下,如果你要做N对N的发布/订阅,建议使用ZMQ代理/转发器作为中介;否则,你可能会遇到动态发现的问题,详细信息可以在这里查看:http://zguide.zeromq.org/page:all#The-Dynamic-Discovery-Problem

撰写回答