问题标签 [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.
node.js - 进程之间的通信:tcp vs unix sockets,ipc vs nats
我正在将一个大型应用程序分解为多个进程,并且我希望每个进程能够相互通信。
现在它将在同一台服务器上,但稍后同一本地网络上的几台服务器将有几个需要相互通信的进程。(表示在一台服务器上提供服务,在同一 vpc 上的另一台服务器上提供服务)
所以..我的原始选项是tcp
or unix sockets
。我知道只有在同一台服务器上,Unix 套接字才有用。但是我们正在考虑编写自己的实现,在同一服务器上的进程将在 unix 套接字上进行通信,以及在使用 tcp 进行通信的服务器之间进行通信。
这值得么 ?当然 tcp 套接字比 unix 套接字要慢..因为它不通过网络并且不被 tcp 相关数据包裹。问题是多少?我找不到 tcp 和 unix 套接字之间基准测试的在线证明。如果 tcp 增加了 3%-5% 的开销,那很酷,但它可以更多吗?我想从其他人多年来的大项目经验中学习,但没有发现任何相关的东西。
下一个...
我们的项目是一个NodejS
项目。
有些人可能会说我可以使用代理来处理消息,所以我尝试使用nats.io
与 node-ipc ( https://www.npmjs.com/package/node-ipc ) 相比,我发现 node-ipc 是 4 倍速度更快,但 nats 具有很酷的发布-订阅功能……但性能很重要。
所以我有很多选择,没有具体的决定。
任何有关该问题的信息将不胜感激。
go - GO lang NATS 队列与多个队列订阅
我正在创建 NATS go lang Queue Subscriber 客户端,如下所示,
因此,每当我向“foo”主题发布任何消息时,有时它会收到,有时则不会。
例如,假设我向上面的“foo”主题发送了 10 条消息,那么它最多会收到 2 或 3 条消息。
我的要求如下,
- 应该有队列订阅。
- 应处理所有输入事件。
- 如何在并发模式下实现队列订阅。
任何帮助表示赞赏。
python - Python:异步 NATS.io 阻塞
我很难让 Python Asyncio NATS.io 连续运行。我有两个类:Account
AccountBridge
持有应用程序的逻辑,它Bridge
通过 NATS.io 与外部服务交流思想。
Main
文件:
Account
班级:
Bridge
班级:
我需要account.connect()
从帐户类中的任何地方调用并获得连接结果(顺序)。现在我得到generator
对象
messagebroker - NATS 是否水平扩展(吞吐量)
我们正在使用 NATS 并使用 3 个以上节点的集群。我们有几个生产者和许多消费者。消息大小很小(~100bytes)但是我们的吞吐量有点高。~40k/秒。所有流量都在 2x10gbps 绑定内部网络上。
我很好奇使用更多节点扩展集群是否会有助于集群的吞吐量。我们有一些小的延迟,随着更多消息/秒的写入,它似乎略有增长。
作为次要说明,是否有可以提高吞吐量的提示/技巧?我们目前正在使用 protobufs,但是否可以进行服务器调整?
amazon-web-services - AWS 中的 NATS 集群 - 缩减时的无限重新连接尝试
我正在尝试通过自动缩放在 AWS ECS 中设置具有集群功能的 NATS 服务器。
背景
作为一个 AWS / NATS 的新手,我认为我可以做一些非常简单的事情。每当一个新的 NATS 容器启动时,我都会使用 ECS API 并找到所有运行 NATS 的 ECS 任务(容器),获取 EC2 IP 地址和映射的端口,并通过--routes
参数传递它们。本质上,每个已经运行的节点都是一个种子。
使用这种方法,添加节点是一件轻而易举的事,但删除种子却很麻烦。
我注意到当通过的节点--routes
死亡时,服务器正在尝试无限重新连接。不幸的是,在云环境中,IP 地址来来去去,所以这有点问题。僵尸路线永远存在。
问题
我用到种子 IP_A 和 IP_B 的路由启动服务器 C,如果 IP_B 的主机死了,C 会尝试无限地重新连接到 IP_B。如果我们使用 IP 地址,到 IP_B 的路由将永远不会在云环境中返回。
我觉得作为云原生的 NATS 应该接受种子已经消失的事实。
是否可以对服务器将在种子上执行的重新连接请求的数量设置最大限制?我用我有限的围棋知识检查了代码,但找不到这方面的迹象。
跟进问题
为了解决这个问题,我认为 DNS(通过 Route 53)、避免 IP 地址和 ELB 的组合会起作用,但我能想到的最简单的设置是设置三个 ELB 组。
elb-s1
:ELB 种子组 1(跨 AZ)elb-s2
:ELB 种子组 2(跨 AZ)elb-normal
:ELB普通节点组(跨AZ)
ELB 种子组 1 中的实例将按如下方式启动:
gnatsd --cluster nats://elb-s1:6222 --routes nats://elb-s2:6222,nats://elb-normal:6222
ELB 种子组 2 中的实例将按如下方式启动:
gnatsd --cluster nats://elb-s2:6222 --routes nats://elb-s1:6222,nats://elb-normal:6222
ELB 普通节点组中的实例将按如下方式启动:
gnatsd --cluster nats://elb-normal:6222 --routes nats://elb-s1:6222,nats://elb-s2:6222
NATS 客户端将连接到:nats://elb-normal:4222
.
每个种子组指向正常节点组的原因是为了确保组中的非请求种子在“外部”帮助下发现网格的其余部分。
这感觉超级复杂。我认为我不是第一个想要在 AWS 中进行弹性 HA 设置的人,所以我将不胜感激任何指点。网络上是否有任何关于 AWS 中的 NATS 集群的参考资料?
python - nats.io python 客户端在关闭时不刷新
client.flush()
我有一个 leetle 测试程序,除非我做一个before ,否则它不起作用client.close()
。对nats/aio/client.py的天真阅读似乎表明它close()
做了某种flush()
,所以我不明白为什么我的测试程序失败了。有必要一直flush()
在之前close()
吗?示例程序似乎没有表明这一点。
我可以看到close()
调用_flush_pending()
,但这与以下内容完全不同flush()
:
flush()
调用_send_ping()
发送一个PING
并等待PONG
响应。_send_ping()
直接写入self._io_writer
,然后调用_flush_pending()
。_flush_pending()
将 None (我猜什么都可以)推入self._flush_queue
. 这大概会唤醒_flusher()
并使其将所有内容self._pending
写入self._io_writer
.publish()
调用_send_command()
以将消息推送到self._pending
,然后还调用_flush_pending()
以使_flusher()
写入所有内容。
测试程序:
FWIW,如果我发送大量消息,那么在某个时候(尚未确定确切的条件),会发送消息。我们注意到在处理文件集合并为文件中的每一行发送消息时的行为:一些文件可以通过,而其他文件则不能,结果是更大的文件(更多行)成功了。所以看起来好像一些内部缓冲区已被填充,这会强制刷新。
cloud-foundry - 如何从应用程序中连接到 Cloud Foundry 的 NATS 服务器?
我读到 NATS 已经部署在 Cloud Foundry 中,它用于所有组件间通信。您可以从您的应用程序连接到该 NATS 服务器吗?
你能得到它的网址吗?
nats.io - 获取 NATS 流服务器中的主题列表
我正在寻找一种在运行期间显示 NATS 流服务器上当前存在的所有主题的方法。已经彻底查看了文档,但到目前为止还没有找到提及这一点。
有没有办法找到可以在服务器上订阅的所有可用主题的列表?
configuration - NATS 服务器配置中的字符串连接
我可以 在 NATS 配置文件中连接变量和字符串吗?例如: