问题标签 [seneca]

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 回答
52 浏览

.net - 如何使用 Rabbitmq 从 .Net 调用 Senecajs 动作

我有一个使用 RabbitMq 作为消息代理的微服务系统,我想通过 .Net 与他们交谈。谢谢!

0 投票
1 回答
358 浏览

javascript - 在 module.exports 中发送数组

我正在处理合并招摇文件。我想传递数组

我根据我的需要得到结果,但它没有传递到module.exports,我在需要这个文件后将它检入另一个文件控制台,我的代码就像

然后我检查了它的结果。但不传递到 module.exports

我的要求文件代码是这样的,

在这里,我将结果输入控制台

请帮我解决这个问题。提前致谢

0 投票
0 回答
234 浏览

docker - Docker 群连接 ECONNREFUSED

我使用 seneca.js 作为微服务框架。Evrything 在本地运行良好,但是当我将服务部署到 swarm 时,我遇到消息 ping 服务被阻止的问题,这是运行路由时来自我的 api 网关的错误:

{"statusCode":502,"error":"Bad Gateway","message":"connect ECONNREFUSED 10.100.0.5:55010"}

这是我的设置:

这是代码:

https://github.com/vforv/hapi-seneca-ts

有谁知道是什么问题?

0 投票
2 回答
14888 浏览

node.js - TypeError:无法读取未定义的属性“替换”

错误

  • 塞内卡致命错误 ===================

    消息:seneca:操作 cmd:signup,role:api 失败:无法读取未定义的属性“替换”。

    代码:act_execute

    详细信息:{ 消息:'无法读取属性 \'replace\' of undefined',模式:'cmd:signup,role:api',fn:[Function:signup],cb:[Function],实例:'Seneca/pr061njfdnng /1504005334341/1/3.2.2/-','orig$':TypeError:无法读取 Array.forEach 的 /usr/src/app/services/common.js:22:24 处未定义的属性“替换”(本机) 在 module.exports (/usr/src/app/services/common.js:20:13) 在 Seneca.signup (/usr/src/app/services/api.js:117:17) 在 execute_action (/usr /src/app/node_modules/seneca/seneca.js:1060:20) 在 Object.act_fn [as fn] (/usr/src/app/node_modules/seneca/seneca.js:1013:11) 在 Immediate.processor ( /usr/src/app/node_modules/gate-executor/gate-executor.js:136:14) 在 runCallback (timers.js:781:20) at tryOnImmediate (timers.js:743:5) at processImmediate [as _immediateCallback] (timers.js:714:5), 'message$': 'Cannot read property \ 'replace\' of undefined', plugin: {} }

    堆栈:在 /usr/src/app/services/common.js:22:24 at Array.forEach (native) at module.exports (/usr/src/app/services/common.js:20:13) at Seneca .signup (/usr/src/app/services/api.js:117:17) at execute_action (/usr/src/app/node_modules/seneca/seneca.js:1060:20) at Object.act_fn [as fn] (/usr/src/app/node_modules/seneca/seneca.js:1013:11) 在 Immediate.processor (/usr/src/app/node_modules/gate-executor/gate-executor.js:136:14) 在 runCallback (timers.js:781:20) 在 tryOnImmediate (timers.js:743:5) 在 processImmediate [as _immediateCallback] (timers.js:714:5)

代码

0 投票
2 回答
1247 浏览

node.js - node.js、Rabbitmq 和 Docker:使用 seneca 的服务似乎在 rabbitmq 之前启动

我正在使用 docker 创建多个容器,其中一个包含一个 rabbitmq 实例,另一个包含应该响应队列活动的 node.js 操作。遍历 docker-compose 日志,我看到很多 ECONNREFUSED 错误,然后我看到该行开始指示rabbitmq 已在其容器中启动。这似乎表明 rabbitmq 似乎是在需要它的服务之后启动的。

作为侧边栏,只是为了消除任何其他可能的原因,这里是 node.js 连接到 rabbitmq 的连接字符串:

这是 docker-compose.yaml 文件中 rabbitmq 的条目:

这个时间问题的解决方法是什么?

如何在消费容器启动之前启动 rabbitmq?

请让我知道这是否不是时间问题,而是配置问题。我列出的 docker-compose.yml 条目中的问题?

0 投票
2 回答
12771 浏览

node.js - Docker 和 Rabbitmq:容器之间的 ECONNREFUSED

我正在尝试为rabbitmq和容器的消费者设置单独的docker容器,即监听队列并执行必要任务的进程。我创建了 yml 文件和 docker 文件。

我能够运行 yml 文件,但是当我检查 docker-compose 日志时,我看到哪里有 ECONNREFUSED 错误。

新用户通知.js:

docker-compose 日志中的错误消息:

示例 docker-compose.yml 文件:

amqp 连接字符串:( 我尝试了两种方式,有和没有用户/密码)amqp://username:password@rabbitmq:5672

我将链接属性添加到 docker-compose 文件并引用了 .env 文件(rabbitmq)中的名称。我尝试从容器外部运行 NewUserNotification.js 文件,它开始正常。什么可能导致这个问题?连接字符串问题?Docker-Compose.yml 配置问题?其他?

0 投票
4 回答
9479 浏览

node.js - 当我尝试使用 Axios 向 Seneca.js API 发出请求时出现内部服务器错误

我写了一个简单的 Seneca 插件,我最终会用它来监听 http 消息:

买家.js

当我使用以下脚本运行它时:

index.js

我现在可以发送 POST 请求localhost:10101/act并使用该插件:

这就是事情变得混乱的地方。我现在想通过 web 应用程序发出这个 http 请求,所以我使用 axios 从网页发出这样的请求:

应用程序.vue

当我单击按钮发送请求时,我从浏览器控制台收到此错误消息(启用 CORS 后):

谁能告诉我为什么这与 curl 的工作方式不同?为什么我得不到我的回应?

0 投票
0 回答
432 浏览

node.js - Seneca.js、Promise 和错误处理

我们正在使用seneca.js将消息放入 Node 应用程序的队列中。我们承诺act调用,并将所有 seneca 使用包装在我们称为 MessageBus 的服务中。所以现在,MessageBus.publish 使用 Seneca 将调用放入队列并等待响应:

这是我们编写的服务的相关部分:

在每次调用时,我们都需要添加catch来处理错误。这工作得很好,但有很多重复的代码。

现在,我们正在使用async/await,我想在一个地方处理所有错误,而不需要将每个调用都包装在一个try/catch块中。然而,我的尝试并没有奏效。

我添加的是一个调用该promisified函数并捕获错误的函数。然后publish改为导出该函数。它工作了一半,但在act功能中,cb没有定义。无论我尝试了什么,cb都从未被定义过,也从未被调用过。

我知道看起来错误是在 中处理的seneca.act,但是如果发生错误并且MessageBus.publish没有包装在try/catch块中,快速应用程序仍然会崩溃。

我的目标是在这个function中有一些与Wes Bos 的解决方案catchErrors类似的东西。我希望不必将每个MessageBus.publish调用都包装在一个try/catch块中,而是在一个地方编写该代码并在那里处理所有错误。

0 投票
0 回答
166 浏览

node.js - 在牧场主上使用 seneca 网格

我有一个 Seneca 网格,可以在我的笔记本电脑上完美运行。然而,让它在牧场主上工作是不可能的。由于网格超时,所有容器都结束了。

我已经阅读了整个seneca-mesh源代码和底层的sneeze库。这给了我一些关于如何调试的线索,但这是我得到的最长的。例如,我意识到 seneca-mesh 提供了几个用于打喷嚏的选项,而这些选项又为他们使用的 SWIM 实现提供了这些选项。

我尝试增加网格连接超时,怀疑它们是两个窄的(这是真的,因为它们是 777 毫秒)。这是我设置的:

编辑:我刚刚意识到,如果我包含完整的内容会更好

可悲的是,它所做的唯一区别是超时时间更长。由于silent您可以看到我设置为 false 的选项为您提供了非常详细的日志,唯一的问题是我无法理解它们失败的原因。

在我最简单的场景中,我有两台服务器,一台作为基础服务器(启动时没有问题)和一个应该通过 SWIM 加入网格的网格节点。检查日志我发现它们能够通信,并且来自节点的加入请求被基节点接收。这发生了几次,由定义的超时间隔,并且在几次加入请求后,基节点要求离开网格并发生超时:

基础节点

客户端节点

如您所见,有几个加入请求,最后一个删除请求,让我们检查客户端日志

很明显,两端都看到了相同的加入请求,但出于某种奇怪的原因,他们不同意加入网格

作为参考,这是一个适用于本地的日志:

正如我所说,我尝试了超时和注册方法的所有可能组合,我在他们的 gitter 频道上寻求帮助,我阅读了所使用的两个主要库的源代码,但我找不到答案。我知道有用户面临与牧场主类似的问题,如下所述: https ://github.com/senecajs/seneca-mesh/issues/75 (顺便说一句,最后一条评论是我的)但他们至少能够运行牧场主的基本网格,我什至达不到这一点。

0 投票
0 回答
368 浏览

node.js - 设计有和没有服务注册表的微服务 [seneca/eureka]

我对在 Spring 和 NodeJs 这两种不同环境中设计微服务很感兴趣。虽然在 Spring 中很容易找到关于 Netflix Eureka 的大量资源(它可能是 Consul 中的第一名),但在 NodeJs 中,我发现了更多允许微服务自行通信的机会,而且没有办法。

以下是一些设计微服务架构的方法:

  • 代码或配置文件中的静态 IP/端口映射
  • 通过 DNS
  • 服务发现(Eureka/Consul)
  • P2P(像区块链?)[还有塞内卡?]

关于 youtube 上的 NodeJs,你可以找到很多视频,其中一个引起我注意的是 seneca 的父亲 Richard Rodger 的视频,标题为“NodeJs microservices without a registry”。seneca 的问题在于,要使其正常工作,您需要一个基础/主要微服务,在我看来,它看起来像是服务发现,因为所有其他微服务都必须知道它的 ip 和端口。

来自作者网站

目前,我们的实现仍然依赖于“众所周知的”入口点。您必须在预定位置运行一些基本节点,以便微服务知道在哪里加入网络——彼得正在为我们修复那个,很快网络将完全自我管理。

或许 Peter 做完之后应该是一个 P2P 微服务架构,微服务的知识会通过 SWIM 协议传播,对吗?

另一个区别是 Seneca 使用模式匹配在微服务之间转发消息,但它总是通过基本/主微服务。

没有服务注册表的 Seneca,它本身不是服务注册表(知道 TAGS 以及它们在哪里而不是 IP)?

抱歉没有代码,但我目前仍然处于理论环境中。