首页 文章

ZeroMQ:订阅者可以发布吗?

提问于
浏览
0

我正在尝试实现我对于我在Node.js中使用0mq进行的pub / sub应用程序的想法 . 我想将消息的发布用作一种事件系统 .

这是一个例子:假设我有一个发布者和两个订阅者 .

每当文件发生更改时,发布者都会发送消息:

//publisher.js
'use strict';

const fs = require('fs'),
      zmq = require('zmq'),

// create publisher endpoint
publisher = zmq.socket('pub'),

filename = 'target.txt';

fs.watch(filename, function(){
  // send message to any subscribers
  publisher.send('files changed');
});

// listen on TCP port 5432
publisher.bind('tcp://*:5432', function(err) {
  console.log('Listening for zmq subscribers...');
});

订户#1记录控制台发生的所有事情:

//subscriber1.js
'use strict';

const zmq = require('zmq'),
      subscriber = zmq.socket('sub');

// subscribe to all messages
subscriber.subscribe('');

// handle messages from publisher
subscriber.on("message", function(data) {
    console.log('Got a message: ' + data);
});

// connect to publisher
subscriber.connect("tcp://localhost:5432");

订户#2验证对文件的更改并发送消息让我们知道它看起来没问题:

//subscriber2.js
'use strict';

const zmq = require('zmq'),
      subscriber = zmq.socket('sub');

// subscribe to all messages
subscriber.subscribe('');

// handle messages from publisher
subscriber.on("message", function(data) {
    //pretend I did some work here

    subscriber.send('File looks great!');
});

// connect to publisher
subscriber.connect("tcp://localhost:5432");

我期望的是从订户2通过套接字发回消息会将其转发给订阅者1,订阅者1将记录它 . 但这似乎并没有发生 .

我可能从根本上误解了pub / sub,但是我可以做我正在谈论的事情吗?如果是这样,我是否需要使用不同的模式,或者我只是使用zmq API错误?

1 回答

  • 0

    我不得不做一些额外的管道来获得我想要的结果 .

    必须向subscriber-publisher.js添加发布者套接字,并从其发布到其他端口 . 然后我不得不将subscriber.js订阅到publisher.js和subscriber-publisher.js发布的两个端口 .

    所以现在我明白为了用pub-sub做这个,我必须构建更多的套接字,并且必须做一些我认为的手动订阅 .

相关问题