问题标签 [nats.io]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
5371 浏览

publish-subscribe - NATS 请求回复 - 它是如何工作的?

我是新的 NATS。不确定 NATS 请求回复的工作原理。

据我了解,这种模式可用于双向通信,但问题是,它是否适用于相同的消息 ID/线程?如果不是,我们不能为同一目的使用两个不同的队列吗?它与 NATS 的 pub-sub 或 queue 模式有何不同?

有人可以提供更多的用例吗?

谢谢。

0 投票
1 回答
1760 浏览

database - 使用 NATS 流服务器作为物联网位置数据的主要数据存储?

我有一个 Mosquitto 代理,它从远程设备接收定位信息。

我需要将这些数据存储在某个地方以供其他微服务处理。

目前有一个Node.js进程订阅broker,批量写入Postgres数据库。

但我看到的问题是,现在需要处理此位置数据的任何其他服务都需要查询 Postgres 数据库。

约束:这适用于本地部署,因此理想情况下我们希望尽可能少地维护。一个带有数据库的虚拟机,可能还有一个指向客户维护的数据库的链接。

作为传感器数据真实来源的数据库的替代方案是类似于 Kafka 的事件日志/事件源方法。然后将有一个代理订阅者,所有微服务都可以从中读取,并在出现故障时从中断的地方继续。

因为它是内部部署的,所以我想要比 Kafka 更轻量级的东西,并且找到了 NATS Streaming Server。

现在,可以通过配置数据存储来持久化 NATS 事件日志。它目前支持简单文件存储和 SQL 存储。

现在,如果我使用 SQL 存储,将原始消息存储到数据库、从数据库读取然后再次存储它们似乎是浪费时间,而且对性能不利。SQL 存储接口也实现了自己的批处理。我不确定我对文件存储作为事实来源的信任程度。

那么,这是一种可行的方法吗?

0 投票
1 回答
302 浏览

zeromq - 是否可以在 ZeroMQ 中使用主题?

我有一个实现NATS 队列
的小项目 这是代码:

如您所见,有 2 个服务 - serviceAon queueAserviceBon queueB以及 2 个客户端:第一个调用服务 A,第二个调用服务 B

NATS 实现 Subject ('serviceA''serviceB')

现在,我想尝试使用 ØMQ 转换示例 我发现使用 ZeroMQ 的类似示例

但我在主题上找不到任何样本。

或许ØMQROUTER用来实现一个主题

您能帮我将主题实现到 ZeroMQ 示例中吗?

0 投票
1 回答
1555 浏览

nats.io - NATS 发布/订阅确认

在过去的几天里,我一直在用 NATS 和 NATS 流服务器做一些 POC。我从 NATS 流服务器开始,为相同的 Java 客户端编写了一个 Java 客户端,并向/从 NATS 流服务器发布/订阅消息,与 NATS 服务器一起集群。NATS-streaming 非常简洁,guids当流媒体服务器收到来自发布者的消息时提供确认。我通过注册一个AckHandler并像这样使用它来实现这一点:

但是,当我开始查看 NATS 服务器(不是流式传输)时,我找不到任何这样的 AckHandler(或其他任何东西)可以向我提供确认guid消息已成功发布。

NATS 流服务器有很多我正在寻找的内置功能 - 例如,message acknowledgementsmax_age消息的 TTL)durable subscriptions等。但它缺乏当前最新版本的集群功能。另一方面,NATS 服务器提供了集群功能,但我找不到 NATS-streaming 提供的其他功能(除非我在文档中错过了它)。

我知道有一个未解决的问题是要在单个表中列出 NATS 与 NATS 流功能,以供参考,但目前还没有完成。

当消息发布到 NATS 服务器时,NATS 服务器是否提供确认?还是确认其中一个订阅者订阅了一条消息?

0 投票
0 回答
559 浏览

node.js - Node.js,带有 nats 的 ws-tcp-relay:连接错误

请帮忙解决问题:

当我启动 nats 服务器监听 4222 port: ./gnatsd --addr localhost --port 4222,然后 ./ws-tcp-relay localhost:4222 -p 4223尝试使用 websocket-nats 通过 websockets 连接(例如在 service.js 中):

我收到此错误:

但是,如果我尝试使用 tcp 客户端端口 4222 直接连接到 nats,则连接建立成功:

0 投票
1 回答
391 浏览

redis - NATS 丢弃队列数据

我正在探索NATS进行排队,目前我正在使用 redis lists。我陷入了以下场景,这在 redis 中很容易管理:

1)有一个守护进程推送队列中的值,一个守护进程不断从队列中读取。如果我的阅读守护程序停止,redis 开始将数据存储在 queue 中。一旦我开始读取守护程序,它就会从最后一个值弹出,它像 FIFO 一样停止。在这种情况下,没有机会丢失我的数据。NATS是否提供相同的规定?

2)如果我的 redis 服务器出现故障,我可以检索队列中已经可用的数据(留下少量数据)。如果 NATS 服务器出现故障,我可以检索我的数据吗?

0 投票
1 回答
1194 浏览

nats.io - 了解 NATS 集群

NATS 服务器集群部分指出:

请注意,NATS 集群服务器的转发限制为一跳。这意味着每个 gnatsd 实例只会将它从客户端接收到的消息转发到它具有路由的紧邻的 gnatsd 实例。从路由接收到的消息只会分发给本地客户端。因此,建议 NATS 使用完整的网格集群或完整的图形,以按预期和文档中描述的那样运行。

假设我有一个由 3 个节点组成的 NATS 集群:A -> B -> C(->表示路由)。请让我知道在以下情况下 NATS 客户端会发生什么:

  • 发送到节点 A 的消息
  • 节点 A 在将消息传递给节点 B 之前突然终止

提前致谢

0 投票
3 回答
509 浏览

php - PHP NATS 客户端在一些空闲时间后断开连接

我一直在使用这个库repejota/phpnats来开发一个可以订阅特定频道的 NATS 客户端。但是在连接后,收到少量消息并有大约 30 秒的空闲时间,它会自行断开连接而没有任何中断。但是,我的 Node.js 客户端在相同的 NATS 服务器上运行良好。

这是我订阅的方式...

任何建议/帮助???

谢谢!

0 投票
1 回答
643 浏览

python-asyncio - 断开连接时 NATS 不会引发异常

我使用了一个在 python asyncio 上使用 NATS 的几乎标准示例。我想接收一条消息,对其进行处理,然后将结果发送回队列,但是当 NATS 断开连接(例如重新启动 gnats)时,不会引发异常。我什至确实等待asyncio.sleep (1, loop = loop)更改上下文并抛出了断开->重新连接异常,但这并没有发生。我究竟做错了什么?可能是一个错误?

0 投票
1 回答
408 浏览

message-queue - NATS - 只有一个订阅者对微服务架构中的已发布事件采取行动

我是 NATS 的新手,并且已阅读以下所有示例: https ://nats.io/documentation/concepts/nats-messaging/

我在 Microservciearchitecture 中,在微服务 Y(MSY)中需要存储从其他微服务 X(MSX)发布的一些信息我有 2-10 个 MSY 实例,所以当在 MSX 和 MSX 实例中进行更改时,我想要发布事件只有 1 个 MSY 实例应保存信息,因此并非所有实例都保存相同的数据。我已阅读 Request-Repy: https ://nats.io/documentation/concepts/nats-req-rep/ 但似乎所有实例都收到消息(并将处理它),即使它是点对点的并且仅针对最快回复的一个实例处理回复

这是正确的还是我误解了例子?如果我只需要 1 个 MSY 实例来处理给定的消息(将数据存储在 db 中),我该怎么做才能做到这一点?