Nats 使用哪种模式

Nats which pattern to use

我问了一个问题: 使用集群微服务架构时使用哪种模式。

我收到的答复是点对点应该有效,但在阅读时: https://nats.io/documentation/concepts/nats-req-rep/ 感觉所有订阅者都收到事件(并因此处理它),但只有一个订阅者响应。这在放置将触发 Inventory 微服务订阅的更新库存事件的订单事件时不起作用(如 link 中的示例),即它不会在集群环境中工作,因为库存将被更新为相同次数作为微服务实例的数量。

如何使用 Nats 解决这种情况?

提前致谢!

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

All subscriptions with the same queue name will form a queue group. Each message will be delivered to only one subscriber per queue group, using queuing semantics. You can have as many queue groups as you wish. Normal subscribers will continue to work as expected.

使用队列组连接您的服务(示例为 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);
});