标签: seneca

Docker和Rabbitmq:容器之间的ECONNREFUSED

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

我能够运行yml文件,但是当我检查docker-compose日志时,我看到有ECONNREFUSED错误的位置.

NewUserNotification.js:

require('seneca')()
    .use('seneca-amqp-transport')
    .add('action:new_user_notification’, function(message, done) {
        … 

        return done(null, {
        pid: process.pid,
        status: `Process ${process.pid} status: OK`
    })
    .listen({
        type: 'amqp',
        pin: ['action:new_user_notification’],
        name: 'seneca.new_user_notification.queue',
        url: process.env.AMQP_RECEIVE_URL,
        timeout: 99999
    });
Run Code Online (Sandbox Code Playgroud)

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

    {"notice":"seneca: Action hook:listen,role:transport,type:amqp failed: connect ECONNREFUSED 127.0.0.1:5672.","code":
    "act_execute","err":{"cause":{"errno":"ECONNREFUSED","code":"ECONNREFUSED","syscall":"connect","address":"127.0.0.1",
    "port":5672},"isOperational":true,"errno":"ECONNREFUSED","code":"act_execute","syscall":"connect","address":"127.0.0.1",
    "port":5672,"eraro":true,"orig":{"cause":{"errno":"ECONNREFUSED","code":"ECONNREFUSED","syscall":"connect","address":"127.0.0.1",
    "port":5672},"isOperational":true,"errno":"ECONNREFUSED","code":"ECONNREFUSED","syscall":"connect","address":"127.0.0.1","port":5672},
    "seneca":true,"package":"seneca","msg":"seneca: Action hook:listen,role:transport,type:amqp failed: connect ECONNREFUSED 127.0.0.1:5672.",
    "details":{"message":"connect ECONNREFUSED 127.0.0.1:5672","pattern":"hook:listen,role:transport,type:amqp","instance":"Seneca/…………/…………/1/3.4.3/-“,
    ”orig$":{"cause":{"errno":"ECONNREFUSED","code":"ECONNREFUSED","syscall":"connect","address":"127.0.0.1","port":5672},"isOperational":true,
"errno":"ECONNREFUSED","code":"ECONNREFUSED","syscall":"connect","address":"127.0.0.1","port":5672}
Run Code Online (Sandbox Code Playgroud)

示例docker-compose.yml文件:

version: '2.1'
services:
 rabbitmq:
    container_name: "4340_rabbitmq"
    tty: true
    image: rabbitmq:management
    ports:
      - 15672:15672
      - 15671:15671
      - 5672:5672
    volumes:
      - /rabbitmq/lib:/var/lib/rabbitmq
      - /rabbitmq/log:/var/log/rabbitmq …
Run Code Online (Sandbox Code Playgroud)

node.js docker docker-compose seneca

9
推荐指数
1
解决办法
4157
查看次数

在微服务之间共享文件

我正在尝试将项目从当前的单体状态转移到微服务架构。该项目在 Node.js 中,所以我开始研究Seneca.js,尤其是它的seneca-mesh模块。将图像处理(裁剪、调整大小等)移动到微服务中似乎是最明智的第一步,因为它现在大大降低了我的应用程序的速度。

当应用程序是单体时,将某些文件传递给文件操作逻辑是没有问题的——只需从本地存储磁盘读取它。然而,对于微服务,如果我们牢记可扩展性,它就会变得更加困难。当然,我可以构建一个图像处理微服务,在同一台主机内扩展它,并在它之间共享我需要的目录,这样它们也可以从本地磁盘读取。

如果我想要一个真正可扩展的微服务,它可以在具有不同 IP 地址但不共享相同文件系统的不同机器上运行和扩展怎么办?我想也许我可以利用 Node 的流 API 并通过 HTTP 或 TCP 或套接字来回发送这些文件,或者您可以命名它。

据我所知,Seneca.js 不能以正确的方式做到这一点。当然,我可以通过 Seneca.js 将文件从主应用程序发送到图像处理服务,如下所示:

fs.createReadStream('/files/hello.jpg')
  .on('data', function(data) {
    seneca.act({ role: 'file', cmd: 'chunk', data: data }, cb);
  })
  .on('end', function(err) {
    seneca.act({ role: 'file', cmd: 'end' });
  })
  .on('error', function(err) {
    seneca.act({ role: 'test', cmd: 'error' });
  });
Run Code Online (Sandbox Code Playgroud)

并分块接收:

seneca.add({ role: 'file', cmd: 'chunk' }, writeToFileCb);
seneca.add({ role: …
Run Code Online (Sandbox Code Playgroud)

node.js microservices seneca

6
推荐指数
2
解决办法
1万
查看次数

app.use()需要中间件函数app.use(seneca.export('web'));

我是seneca的菜鸟,我只是想尝试使用Node js从开发微服务中运行示例代码,它说:

var seneca = require('seneca')();

seneca.add('role:api,cmd:bazinga',function(args,done){
    done(null,{bar:"Bazinga!"});
});

seneca.act('role:web',{use:{
    prefix: '/my-api',
    pin: {role:'api',cmd:'*'},
    map:{
    bazinga: {GET: true}
    }
    }})

var express = require('express');
var app = express();

app.use( seneca.export('web') ); // <<<<<< this line might be the cause 
app.listen(3000);
Run Code Online (Sandbox Code Playgroud)

但我得到一个错误,上面写着:

TypeError: app.use() requires middleware functions
    at EventEmitter.use (/home/oem/node_modules/express/lib/application.js:209:11)
    at Object. (/home/oem/Documents/seneca/app.js:7:8)
    at Module._compile (module.js:409:26)
    at Object.Module._extensions..js (module.js:416:10)
    at Module.load (module.js:343:32)
    at Function.Module._load (module.js:300:12)
    at Function.Module.runMain (module.js:441:10)
    at startup (node.js:139:18)
    at node.js:974:3

此外,我试图运行从网络上复制的另一个示例代码,对不起,我只是可以找到链接.但我只是复制,粘贴并试图运行,我得到了同样的错误.我认为这更像是一个设置问题?

编辑

我还在尝试玩这个.我理解这一点的方式是在app.use行,基本上我只是调用seneca-web模块.所以我做的是

app.use(require('seneca-web'))
Run Code Online (Sandbox Code Playgroud)

代替

app.use( seneca.export('web') ) …
Run Code Online (Sandbox Code Playgroud)

node.js seneca

5
推荐指数
1
解决办法
2552
查看次数

Docker容器:基于Node.js的微服务的大小

我一直在玩Docker容器中设置一些微服务,其中服务基于Seneca.js.由于这是一个Node.js应用程序,我派生了容器"FROM node".但是,容器映像的大小约为600 MB.不完全是"微观".最终的应用程序将使用几个这样的服务的集合,如果每个服务器的大小超过600 MB,它将把应用程序炸成几GB.

我做错了什么,或者你是如何设置基于Docker-Node.js的微服务?
非常感谢.

干杯,

马丁

node.js docker microservices seneca

1
推荐指数
1
解决办法
618
查看次数

标签 统计

node.js ×4

seneca ×4

docker ×2

microservices ×2

docker-compose ×1