Loopbackjs 如何在环回4中实现rabbit mq或bull js

Loopbackjs 如何在环回4中实现rabbit mq或bull js,loopbackjs,loopback4,Loopbackjs,Loopback4,我正在尝试实现一个后台服务,这样API调用上的负载就更少了。后台任务将运行以将文件上载到S3,并使用NodeEmailer发送电子邮件。按照环回4的设计模式,您可以创建服务提供商并将其注入到您的服务或控制器中。 下面是Bull.js的一个非常基本的示例: 从“Bull”导入Bull,{Queue,Job}; 从“@loopback/core”导入{Provider,service}”; 从“@loopback/rest”导入{get}; 导出功能音频处理器(作业:作业){ console.log

我正在尝试实现一个后台服务,这样API调用上的负载就更少了。后台任务将运行以将文件上载到S3,并使用NodeEmailer发送电子邮件。

按照环回4的设计模式,您可以创建服务提供商并将其注入到您的服务或控制器中。 下面是Bull.js的一个非常基本的示例:

从“Bull”导入Bull,{Queue,Job};
从“@loopback/core”导入{Provider,service}”;
从“@loopback/rest”导入{get};
导出功能音频处理器(作业:作业){
console.log(
`正在处理音频文件:${job.data.filename}`,
`音频比特率:${job.data.bitrate}`
);
}
导出类AudioQueueProvider实现提供程序{
异步值(){
const queue=new Bull(“音频队列”{
redis:{端口:6379,主机:“127.0.0.1”}
});
队列处理(音频处理器);
返回队列;
}
}
导出类音频控制器{
建造师(
@服务(AudioQueueProvider)公共队列:队列;
) {}
@获取(“/process audio”)
异步addToQueue():承诺{
等待这个。队列。添加(
{
文件名:“process_me.wav”,
比特率:320,
}
);
返回“音频文件已添加到音频队列以进行处理”;
}
}
RabbitMQ实现应该类似(未测试):

从“@loopback/core”导入{Provider,service}”;
从“@loopback/rest”导入{get};
从“amqplib/callback_api”导入amqp;
导出功能音频处理器(消息:任意){
console.log(
`正在处理音频文件:${msg.content.filename}`,
`音频比特率:${msg.content.bitrate}`
);
}
导出类AudioQueueProvider实现提供程序{
异步值(){
const CONN_URL=”amqp://localhost";
设ch=null;
const channelName='AudioQueue';
amqp.connect(连接URL,函数(错误,连接){
conn.createChannel(函数(错误,通道){
ch=信道;
});
});
ch.assertQueue(信道名称{
持久性:错误
});
总消费(信道名称、音频处理器、{
诺克:是的
});
返回ch;
}
}
导出类音频控制器{
建造师(
@服务(AudioQueueProvider)公共频道:任意;
) {}
@获取(“/process audio”)
异步addToQueue():承诺{
等待this.channel.sendToQueue(
“音频队列”,
{
文件名:“process_me.wav”,
比特率:320,
}
);
返回“音频文件已添加到音频队列以进行处理”;
}
}

遵循环回4的设计模式,您可以创建一个服务提供者,并将其注入到您的服务或控制器中。 下面是Bull.js的一个非常基本的示例:

从“Bull”导入Bull,{Queue,Job};
从“@loopback/core”导入{Provider,service}”;
从“@loopback/rest”导入{get};
导出功能音频处理器(作业:作业){
console.log(
`正在处理音频文件:${job.data.filename}`,
`音频比特率:${job.data.bitrate}`
);
}
导出类AudioQueueProvider实现提供程序{
异步值(){
const queue=new Bull(“音频队列”{
redis:{端口:6379,主机:“127.0.0.1”}
});
队列处理(音频处理器);
返回队列;
}
}
导出类音频控制器{
建造师(
@服务(AudioQueueProvider)公共队列:队列;
) {}
@获取(“/process audio”)
异步addToQueue():承诺{
等待这个。队列。添加(
{
文件名:“process_me.wav”,
比特率:320,
}
);
返回“音频文件已添加到音频队列以进行处理”;
}
}
RabbitMQ实现应该类似(未测试):

从“@loopback/core”导入{Provider,service}”;
从“@loopback/rest”导入{get};
从“amqplib/callback_api”导入amqp;
导出功能音频处理器(消息:任意){
console.log(
`正在处理音频文件:${msg.content.filename}`,
`音频比特率:${msg.content.bitrate}`
);
}
导出类AudioQueueProvider实现提供程序{
异步值(){
const CONN_URL=”amqp://localhost";
设ch=null;
const channelName='AudioQueue';
amqp.connect(连接URL,函数(错误,连接){
conn.createChannel(函数(错误,通道){
ch=信道;
});
});
ch.assertQueue(信道名称{
持久性:错误
});
总消费(信道名称、音频处理器、{
诺克:是的
});
返回ch;
}
}
导出类音频控制器{
建造师(
@服务(AudioQueueProvider)公共频道:任意;
) {}
@获取(“/process audio”)
异步addToQueue():承诺{
等待this.channel.sendToQueue(
“音频队列”,
{
文件名:“process_me.wav”,
比特率:320,
}
);
返回“音频文件已添加到音频队列以进行处理”;
}
}
@服务(AudioQueueProvider)公共队列:队列对我不起作用。我必须在应用程序构造函数中绑定AudioQueueProvider,并将控制器
@inject(QUEUE\u SERVICE\u BINDING\u KEY)公共队列:QUEUE
@SERVICE(AudioQueueProvider)公共队列:QUEUE
对我不起作用。我必须在应用程序构造函数中绑定AudioQueueProvider并将其注入控制器
@inject(QUEUE\u SERVICE\u BINDING\u KEY)公共队列:QUEUE