在nestjs中使用rabbitmq
1.安装rabbitmq: docker run -dit --name myrabbitmq -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin -p 15672:15672 -p 5672:5672 rabbitmq:management 2.npm install amqplib amqp-connection-manager 3.subscribers.module.ts
import { Module } from '@nestjs/common';
import { SubscribersController } from './subscribers.controller';
import { SubscribeService } from 'src/modules/subscribers.service'
import { ConfigModule, ConfigService } from '@nestjs/config';
import { ClientProxyFactory, Transport } from '@nestjs/microservices'; @Module({
imports: [ConfigModule],
controllers: [SubscribersController],
providers: [
{
provide: 'SUBSCRIBERS_SERVICE',
useFactory: () => {
return ClientProxyFactory.create({
transport: Transport.RMQ,
options: {
urls: [`amqp://admin:admin@localhost:5672`],
queue: 'my_queue2',
noAck: false,//false,需要手动确认消息
queueOptions: {
durable: true,//消息持久化
},
},
})
},
inject: [ConfigService],
}, SubscribeService
],
})
export class SubscribersModule { }
4.subscribers.controller.ts//发送消息
import {
Body,
Controller,
Post,
Inject,
} from '@nestjs/common';
import { ClientProxy } from '@nestjs/microservices';
import { SubscribeService } from 'src/modules/subscribers.service'
@Controller('subscribers')
export class SubscribersController {
constructor(
@Inject('SUBSCRIBERS_SERVICE') private subscribersService: ClientProxy, private service: SubscribeService
) { }
@Post()
async createPost(@Body() subscriber) {
// this.service.createPost(subscriber)
//省略数据库存储,
return this.subscribersService.send({
cmd: 'add-subscriber'
}, subscriber) } //省略定时任务重新发送
}
5.app.controller.ts //接受消息
import { Controller, Get, Inject, Body, Post } from '@nestjs/common';
import { AppService } from './app.service';
import { MessagePattern, Payload, Ctx, RmqContext } from '@nestjs/microservices';
@Controller()
export class AppController {
constructor(
private readonly appService: AppService,
) { }
@Get()
getHello(): string {
return this.appService.getHello();
}
@MessagePattern({ cmd: 'add-subscriber' })
async addSubscriber(@Payload() subscriber, @Ctx() context: RmqContext) {
const channel = context.getChannelRef();
const originalMsg = context.getMessage();
//省略处理数据库
console.log('app.....get message is ', subscriber)
channel.ack(originalMsg);
return subscriber;
}
}
6.main.ts
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { Transport } from "@nestjs/microservices";
async function bootstrap() {
const app = await NestFactory.create(AppModule);
app.connectMicroservice({
transport: Transport.RMQ,
options: {
urls: [`amqp://admin:admin@localhost:5672`],
queue: 'my_queue2',
noAck: false,
queueOptions: { durable: true },
},
});
app.startAllMicroservices();
await app.listen(3000);
}
bootstrap();
7.目录结构

总结:只能在controller中接受消息!!!!!,折腾了一下午,在service中发消息和接受消息,都不行,如有解决办法,欢迎指导。。。 本文整理来自网络,,确定可以跑通,
在nestjs中使用rabbitmq的更多相关文章
- .NET 环境中使用RabbitMQ
在企业应用系统领域,会面对不同系统之间的通信.集成与整合,尤其当面临异构系统时,这种分布式的调用与通信变得越发重要.其次,系统中一般会有很多对实时性要求不高的但是执行起来比较较耗时的地方,比如发送短信 ...
- .NET 环境中使用RabbitMQ(转)
在企业应用系统领域,会面对不同系统之间的通信.集成与整合,尤其当面临异构系统时,这种分布式的调用与通信变得越发重要.其次,系统中一般会有很多对实时性要求不高的但是执行起来比较较耗时的地方,比如发送短信 ...
- 转:.NET 环境中使用RabbitMQ
原文来自于:http://blog.jobbole.com/83819/ 原文出处: 寒江独钓 欢迎分享原创到伯乐头条 在企业应用系统领域,会面对不同系统之间的通信.集成与整合,尤其当面临异构系统 ...
- 在Node.js中使用RabbitMQ系列二 任务队列
在上一篇文章在Node.js中使用RabbitMQ系列一 Hello world我有使用一个任务队列,不过当时的场景是将消息发送给一个消费者,本篇文章我将讨论有多个消费者的场景. 其实,任务队列最核心 ...
- OpenStack中的rabbitmq的配置方法
OpenStack中的rabbitmq的配置方法 author:headsen chen 2017-10-11 17:24:58 个人原创,允许转载,转载请注明作者,出处,否则依法追究法律责任 ...
- 学习在.NET Core中使用RabbitMQ进行消息传递之持久化(二)
前言 上一节我们简单介绍了RabbitMQ和在安装后启动所出现的问题,本节我们开始正式进入RabbitMQ的学习,对于基本概念请从官网或者其他前辈博客上查阅,我这里不介绍基础性东西,只会简单提一下,请 ...
- 浅谈surging服务引擎中的rabbitmq组件和容器化部署
1.前言 上个星期完成了surging 的0.9.0.1 更新工作,此版本通过nuget下载引擎组件,下载后,无需通过代码build集成,引擎会通过Sidecar模式自动扫描装配异构组件来构建服务引擎 ...
- .NET 环境中使用RabbitMQ 转发 http://www.cnblogs.com/yangecnu/p/4227535.html
.NET 环境中使用RabbitMQ 在企业应用系统领域,会面对不同系统之间的通信.集成与整合,尤其当面临异构系统时,这种分布式的调用与通信变得越发重要.其次,系统中一般会有很多对实时性要求不高的 ...
- 二、消息队列之如何在C#中使用RabbitMQ
1.什么是RabbitMQ.详见 http://www.rabbitmq.com/. 作用就是提高系统的并发性,将一些不需要及时响应客户端且占用较多资源的操作,放入队列,再由另外一个线程,去异步处理这 ...
- Python中使用RabbitMQ
一 RabbitMQ简介 RabbitMQ是一个在AMQP基础上完整的,可复用的企业消息系统.他遵循Mozilla Public License开源协议. MQ全称为Message Queue, 消息 ...
随机推荐
- GDOI 2021 PJ 总结
Day 0.5 在门口等了好久,终于进去了. Day 1 下午来到考场,发现自己承诺书没有拿,然后就跑到宿舍去拿,回来发现只要身份证. T1一眼是个博弈,发现不太好打,先跳. T2发现最多消耗4320 ...
- python实现通用json导入到mysql
import json from Db import Db db = Db() ''' 参考配置文件 { "file": "test.json", " ...
- 用ksweb+Android做服务器,搭建WordPress博客环境
旧的安卓手机不要仍,安装上ksweb给wordpress做服务器,隔壁小孩都馋哭了. 为了能在自己的安卓手机服务器上写博客,首先我们来了解一下WordPress和ksweb: WordPress是使用 ...
- vscode安装教程(含插件配置)
1.下载 下载地址:Download Visual Studio Code VS code,全称Visual Studio Code,是Microsoft(微软)在2015年4月30日发布的,编写现代 ...
- C++练习9 函数的重载
函数的重载是用一个函数名定义多个函数,但是这些同名函数的形参列表(参数个数,类型,顺序)必须不同. 函数重载的规则: 1.函数名称必须相同. 2.参数列表必须不同(个数不同.类型不同.参数排列顺序不同 ...
- 《深入理解java虚拟机》第七章读书笔记——虚拟机类加载机制
系列文章目录和关于我 一丶虚拟机类加载机制是什么 java虚拟机将描述类的数据从class文件加载到内存,并对数据进行校验,转换解析和初始化,最终形成可用被虚拟机直接使用的java类型. 二丶类加载时 ...
- LeetCode-2013 检测正方形
来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/detect-squares 题目描述 给你一个在 X-Y 平面上的点构成的数据流.设计一个满足下 ...
- Kotlin学习-类(嵌套类,内部类,数据类,静态类)及类扩展
一般类形式: class Person(var name: String){//构造函数放在类头部 var age = 1 var fulName: String var address = &quo ...
- P7213 [JOISC2020] 最古の遺跡 3
这个题刚好是一个月前我们学校联赛组的人考的题的 T4 .今天有幸看见原题. 我当时顺便看了他们的题.想了一个小时,才想出来了如下的麻烦做法. 然后教练让我来讲这个题,我讲得很累,大家也都没有改. 题意 ...
- Python实现XX短视频加密算法抓包分析及刷邀请
Python实现XX短视频加密算法抓包分析及刷邀请 出自:https://zhuanlan.zhihu.com/p/466929667?utm_id=0 Python彳余 一个会常常更新互联网,编程的 ...