我有一个问题,使用ZeroMQ与经销商套接字连接到对等体而不是绑定并让对等体连接到它。
这是一个例子(这不是使用ZeroMQ的公共C#绑定):
var router = context.CreateRouterSocket();
var dealer = context.CreateDealerSocket();
var endpoint = ZeroTcpEndpoint.CreateLoopback(9000);
dealer.Connect(endpoint);
// ...
//
// If I don't bind the Router and I send a message on the Dealer,
// it doesn't block. It seems the message is dropped.
// router.Bind(endpoint);
dealer.SendMessage();
正如您所看到的,如果我有一个我不会绑定的路由器套接字并且我将一个Dealer Socket连接到它,SendMessage
不会阻止。消息似乎被删除了。
这模拟了经销商仅根据文档阻止SendMessage
,如果它绑定并且有对等连接到它,而不是当它本身连接到对等时。
基本上我想要实现的是避免在对等体由于某种原因突然脱机而丢弃消息,并且由于没有办法区分丢弃消息和已发送消息之间的区别,除非通过阻塞同行,我认为经销商是最好的选择。
如果我不能与经销商合作,如此处所观察到的,我可以采用另一种方法吗?这里有一个问题,在Python绑定中观察到类似的东西(PyZMQ PUSH socket does not block on send()),它基本上建议我将Send High Watermark设置为1.如果我这样做会有什么陷阱?
感谢。