鉴于node.js
中的以下发布商以及java
中的以下订阅者(此设置功能齐全),我有以下两个问题:
queueBind
中使用什么作为第三个参数?为什么?为什么它按原样运行("test"
是一个随机选择)?rabbit.js
中的交换之外,还有办法指定队列吗?如果是,那怎么样?如果没有,那么为什么以及我应该使用哪个模块(代码示例是受欢迎的)?// node.js
var context = require("rabbit.js").createContext();
var pub = context.socket('PUB');
pub.connect(config.exchange);
server.post("/message/:msg", function(req, res) {
pub.write(req.params.msg, 'utf8');
res.end();
});
// java
ConnectionFactory factory = new ConnectionFactory();
factory.setHost(host);
try {
Connection connection = factory.newConnection();
Channel channel = connection.createChannel();
channel.exchangeDeclare(exchange, "fanout");
String queueName = channel.queueDeclare().getQueue();
channel.queueBind(queueName, exchange, "test"); // Question1: what should I use as the third argument and why?
// Question2: is there a way to configure rabbit.js with a queue name instead?
//channel.queueDeclare(queueName, false, false, false, null);
QueueingConsumer consumer = new QueueingConsumer(channel);
channel.basicConsume(queueName, true, consumer);
try {
while (true) {
QueueingConsumer.Delivery delivery = consumer.nextDelivery();
String message = new String(delivery.getBody());
LOG.info("Received message: " + message);
}
} catch (InterruptedException e) {
LOG.catching(e);
} finally {
channel.close();
connection.close();
}
} catch (IOException e) {
LOG.catching(e);
}
答案 0 :(得分:1)
自己的答案,到目前为止我已经挖掘出来了:
第三个参数是路由密钥,在topic
中称为rabbit.js
。通过提供test
,我只订阅发送到test
主题或没有主题集的消息(默认情况下为rabbit.js
)。如果我也在发布商中使用主题,我可以使用pub.publish(topic, message, encoding)
代替pub.write(message, encoding)
或将其提供给connect
方法
看起来不是这样,仍然不知道为什么。该论点认为rabbit.js
是一个更高级别的库,因此它进行了某些简化。为什么这个简化是我不知道的。但是,我主要想为单个交换使用多个通信线程,我也可以通过使用主题/路由键来实现。所以没什么大不了的。