使用模式的Nats

时间:2017-06-11 18:46:15

标签: nats.io nats-streaming-server

我问了一个问题: Microservice Architecture dependency使用集群式微服务架构时使用的模式。

我收到了答案,点到点应该有效,但在阅读时: https://nats.io/documentation/concepts/nats-req-rep/ 感觉就像所有订阅者都收到了事件(因为它处理它),但只有一个订阅者会响应。当放置一个订单事件时,这将无法触发库存微服务订阅的更新库存事件(如链接中的示例),即由于库存而无法在集群环境中工作,因此更新的次数与微服务实例的数量。

如何使用Nats解决此问题?

提前致谢!

1 个答案:

答案 0 :(得分:4)

NATS.io使用队列组支持此功能:

  

具有相同队列名称的所有订阅将形成队列组。   每条消息将被传送到每个队列组只有一个订阅者,   使用排队语义。您可以拥有任意数量的队列组。   普通用户将继续按预期工作。

使用队列组连接您的服务(示例是node.js):

https://github.com/nats-io/node-nats#queue-groups

nats.subscribe('foo', {'queue':'job.workers'}, function() {
    received += 1;
});

然后客户端将使用库提供的请求方法:

https://github.com/nats-io/node-nats#basic-usage

// Request for single response with timeout.
nats.requestOne('help', null, {}, 1000, function(response) {
  // `NATS` is the library.
  if(response.code && response.code === NATS.REQ_TIMEOUT) {
    console.log('Request for help timed out.');
    return;
  }
  console.log('Got a response for help: ' + response);
});