问题标签 [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.
node.js - SenecaJS 服务和 Express API 之间的客户端请求超时
我正在使用 SenecaJS 构建基于微服务的应用程序。到目前为止,我已经概念化了一个微服务,它只包含一个动作。调用此操作时,将执行一个耗时的 shell 命令(大约耗时 3 分钟)并作为响应返回 - shell 命令的输出。我的代码文件可以在这里找到:https ://gist.github.com/ohmtrivedi/5a94841d25714f3cfd6aee260add97bb
因此,我一直在尝试以两种不同的方式向该服务发出请求:首先,我osfp_tool
使用 cURL 向服务(运行插件)发送直接请求,如下所示:http: //senecajs.org/getting -started/#writing-microservices。其次,通过参考本教程:http ://senecajs.org/getting-started/#web-server-integration ,我编写了一个与我的服务(osfp_service
)通信的 Express API。因此,我将 HTTP 请求(使用 POSTMAN)发送到 Express API。
我曾经在这两种情况下都收到客户端请求超时错误。经过一番研究,我了解了 Seneca 实例中的超时配置。因此,我在 2 个地方添加了时间配置 - 在 Seneca 服务 ( osfp_service
) 以及 Express API ( app.js
) 中。请注意,我已将超时设置为 300000 毫秒或 5 分钟。我已经检查过 shell 命令大约需要 3 分钟,所以超时设置得更多。但是,我仍然面临客户端请求超时错误,如下所示。我知道 shell 命令执行没有错误,就像在我的服务日志上一样,即使在我收到客户端超时请求错误之后,操作也成功完成了执行,这可以使用 console.log 消息看到。
希望有人可以帮助我解决这个问题,现在坚持了很长时间。
编辑
所以,我一直在玩超时配置。我能够osfp_service.js
通过将 seneca 实例中的超时设置在最顶层(https://gist.github.com/ohmtrivedi/5a94841d25714f3cfd6aee260add97bb#file-osfp_service-js-L8)来解决脚本中的超时错误。
app.js
如果我以相同的方式设置超时配置( https://gist.github.com/ohmtrivedi/5a94841d25714f3cfd6aee260add97bb#file-app2-js-L26),那么我仍然会收到错误 504:客户端请求超时/网关超时(https: //drive.google.com/open?id=1El2JCy047dnm6PHlvU33d_mKPuIWUlfX)。
app.js
如果我在 seneca 实例的传输对象内部设置超时配置( https://gist.github.com/ohmtrivedi/5a94841d25714f3cfd6aee260add97bb#file-app1-js-L26),那么我得到错误 503:响应超时/服务不可用(https ://drive.google.com/open?id=1u6w7XyK9-vAJVhna_JnIQ4imRzOm_51T)。我不明白为什么它说服务不可用,因为该操作确实被执行,甚至成功完成。
我似乎无法理解不同的行为。
microservices - seneca - 两个微服务之间的通信
我是新来的塞内卡。我一直在尝试让两个微服务相互通信,但我一直失败并出现以下错误:
错误:响应错误:404 Not Found at module.exports.internals.Utils.internals.Utils.handle_response (c:\Users\Actiview\Desktop\microservices\orderManager\node_modules\seneca-transport\lib\transport-utils.js: 71:11) 在 c:\Users\Actiview\Desktop\microservices\orderManager\node_modules\seneca-transport\lib\http.js:154:25 在读取 (c:\Users\Actiview\Desktop\microservices\orderManager\node_modules \wreck\lib\index.js:590:24) 在完成时 (c:\Users\Actiview\Desktop\microservices\orderManager\node_modules\wreck\lib\index.js:398:20) 在包装 (c:\Users \Actiview\Desktop\microservices\orderManager\node_modules\hoek\lib\index.js:879:20) 在 module.exports.internals.Recorder.onReaderFinish (c:\Users\Actiview\Desktop\microservices\orderManager\node_modules\wreck \lib\index.js:449:16) 在 Object.onceWrapper (events.js:313:30) 在 finishMaybe (_stream_writable.js:614:14) 的 module.exports.internals.Recorder.emit (events.js:208:7) 的 emitNone (events.js:111:20)
=== SENECA 致命错误 === 消息:::: seneca:操作失败:响应错误:404 未找到。代码::::act_execute INSTANCE ::: Seneca/pcbyi7v5c76v/1534346071465/6536/3.7.0/- DETAILS ::: { message: 'Response Error: 404 Not Found', pattern: '', fn: { [Function: transport_client] id: 'host:127.0.0.2,pg:,port:8080' }, callback: { [Function: bound action_reply] seneca: Seneca { 'private$': { act: { parent: { start: 1534346071559, end : 1534346071561, 更多...
这是我的代码:
订单索引.ts
订单插件.ts
电子邮件索引.ts
电子邮件插件.ts
请帮我。肿瘤坏死因子。
node.js - 我可以将 Pact.js 与 Seneca.js 一起使用吗
在过去的几天里,我刚刚遇到了Pact和Consumer-Driven Contracts模式,我喜欢它!
我对这些模式和微服务真的很陌生。在我看来,Pact 将主要致力于 HTTP API。
所以我想知道 Pact 是否会使用Seneca.js(我有一个围绕 Seneca.js 构建的微服务系统)?如何让它发挥作用?我会从使用 Seneca.js 的消费者驱动的合同中受益吗?
javascript - 如何从 Seneca 中的操作中引发错误?
我正在 SenecaJS 中开发一个简单的任务管理器,并且试图了解从操作中引发错误的正确方法。假设我有一个从数据存储加载任务的操作,但该任务不存在......
以下是我插件中的方法:
这是单元测试:
下面的代码有效,但正如您所见,我真的忽略了err回调并评估结果以查看它是否是错误。在文档中,Seneca 使用以下内容引发错误:
回复(新错误(404));
或者
抛出新的错误(404);
但是当我这样做时,它会结束该过程并且单元测试失败。此外, err 回调似乎总是为空,即使我回复了两个对象。
有没有更正确的方法来利用 err 回调返回错误?
javascript - 无法使用 senecajs 从另一个服务中获取猫鼬模型
我有两个 seneca 服务在端口3000
和3001
. 我正在尝试从端口上的服务创建一个单独的猫鼬连接3000
创建猫鼬模型并在端口上运行的服务中获取它3001
连接服务.js
插件代码connection-service.js
服务.jsrunning as client
客户端服务的插件代码
但是,当我使用done(null,{somekey:"someRandom_string_or_object"})
它时它可以工作,但当我通过创建的模型时不起作用done(null,{model:UserModel})
node.js - 节点塞内卡猫鼬奇怪的行为
我是 NodeJS 的新手并使用 ff 包:
- 猫鼬 v5.0.9
- 以 seneca-amqp-transport 和 rabbitMQ 作为代理的 seneca v3.4.3(不确定术语是否正确)
有关示例代码和更多信息,请查看此链接。
我注意到,如果我有一个简单的 seneca 侦听器脚本 (RPC),仅带有rabbitMQ 连接,没有猫鼬连接,则侦听器脚本会在 rabbitMQ 死亡后死亡。这是因为 seneca 以某种方式发出了一个“杀死”信号,这对我来说没问题。如果它与rabbitMQ断开连接,我希望监听器脚本死掉。但是如果 seneca 侦听器脚本 (RPC) 有 rabbitMQ 和 mongoose 连接,并且 rabbitMQ 死了,侦听器脚本仍然启动并运行。猫鼬以某种方式保持连接或脚本正常运行。
请参阅下面的输出:
INFO [2019-03-21T06:37:23.934Z](mylaptop 上的 27933):工人已初始化...
INFO [2019-03-21T06:37:33.382Z](mylaptop 上的 27933):- 正在执行 SIGINT 侦听器.. .
INFO [2019-03-21T06:37:33.384Z] (27933 on mylaptop): 关闭数据库连接。
INFO [2019-03-21T06:37:33.387Z](我的笔记本电脑上的 27933):关闭消息代理。
INFO [2019-03-21T06:37:33.388Z](我的笔记本电脑上的 27933):消息代理已关闭。
INFO [2019-03-21T06:37:33.389Z](我的笔记本电脑上的 27933):数据库连接已关闭。
INFO [2019-03-21T06:37:33.391Z](我的笔记本电脑上的 27933):优雅退出已完成。
终止进程...
INFO [2019-03-21T06:37:33.391Z] (27933 on mylaptop): -- 执行退出监听器...
INFO [2019-03-21T06:37:33.391Z](我的笔记本电脑上的 27933):关闭数据库连接。
INFO [2019-03-21T06:37:33.392Z](我的笔记本电脑上的 27933):数据库连接已关闭。
INFO [2019-03-21T06:37:33.392Z](我的笔记本电脑上的 27933):关闭消息代理。
INFO [2019-03-21T06:37:33.392Z](我的笔记本电脑上的 27933):消息代理已关闭。
如您所见,我触发了 Ctrl+C (SIGINT),因为侦听器脚本确实响应了 rabbitMQ 关闭,但是您还可以看到-- Executing exit listener...
- seneca 的退出信号 - 已经在 NodeJS 的事件循环中但不知何故没有优先(?)/由NodeJS执行。
我想知道为什么?有没有办法绕过这个并优先考虑塞内卡的“杀戮”信号。
提前致谢。
node.js - 如何从 Seneca 中的匹配模式中获得响应?
我想知道从与 Seneca 中的请求模式匹配的服务中获得响应的最佳方式是什么?或者接收者不应该向发布者发送 ACK。更具体地说,我想从向用户发送电子邮件的服务中获得响应,以确保我的电子邮件已发送。
这种情况的最佳做法是什么?
塞内卡来了!!
node.js - 如何使用 seneca-amqp-transport 向消息添加标头属性
我正在做一个需要使用一些 rabbitmq 队列的项目。其中一个队列要求消息被延迟以供将来处理。我注意到在 rabbmitmq 的文档中有一个名为 RabbitMQ 延迟消息插件的新插件似乎允许此功能。过去对于基于 rabbmitmq 的项目,我使用 seneca-amqp-transport 进行消息添加和处理。问题是我没有看到任何关于 seneca 的文档,也没有找到任何概述如何添加标题属性的示例。
似乎我需要首先确保队列是使用 x-delayed-type 创建的。此外,由于每条消息都添加到队列中,我需要确保在将消息发送到rabbbitmq 之前将x-delay 标头参数添加到消息中。有没有办法通过 seneca-amqp-transport 传递这个参数 x-delay?
这是我当前用于向队列添加消息的代码:
在上面的代码中,与标头相关的数据会去哪里?
rabbitmq - Senecajs 和 RabbitMQ ...“amqp”传输无法完全正常工作
我有一个简单的 Sencajs 和 RabbitMQ 设置。
听众
客户
包.json
当我运行这两个文件(节点 foo.js 和节点 app.js)时,app.js 会抛出以下错误:
p>但是,我可以清楚地看到(在 RabbitMQ 仪表板中)这些连接已建立......
这是我第一次玩 Senecajs 和 RabbitMQ ......我做错了什么?
express - Seneca web 与 express 崩溃但未找到模式
问题是当没有找到 Seneca-web 的模式时,它在路由中定义它会使 Seneca-web 与 express 服务器崩溃。我们如何设法说在 Seneca 网络中找不到 URL。