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的更多相关文章

  1. .NET 环境中使用RabbitMQ

    在企业应用系统领域,会面对不同系统之间的通信.集成与整合,尤其当面临异构系统时,这种分布式的调用与通信变得越发重要.其次,系统中一般会有很多对实时性要求不高的但是执行起来比较较耗时的地方,比如发送短信 ...

  2. .NET 环境中使用RabbitMQ(转)

    在企业应用系统领域,会面对不同系统之间的通信.集成与整合,尤其当面临异构系统时,这种分布式的调用与通信变得越发重要.其次,系统中一般会有很多对实时性要求不高的但是执行起来比较较耗时的地方,比如发送短信 ...

  3. 转:.NET 环境中使用RabbitMQ

    原文来自于:http://blog.jobbole.com/83819/ 原文出处: 寒江独钓   欢迎分享原创到伯乐头条 在企业应用系统领域,会面对不同系统之间的通信.集成与整合,尤其当面临异构系统 ...

  4. 在Node.js中使用RabbitMQ系列二 任务队列

    在上一篇文章在Node.js中使用RabbitMQ系列一 Hello world我有使用一个任务队列,不过当时的场景是将消息发送给一个消费者,本篇文章我将讨论有多个消费者的场景. 其实,任务队列最核心 ...

  5. OpenStack中的rabbitmq的配置方法

    OpenStack中的rabbitmq的配置方法 author:headsen chen   2017-10-11  17:24:58 个人原创,允许转载,转载请注明作者,出处,否则依法追究法律责任 ...

  6. 学习在.NET Core中使用RabbitMQ进行消息传递之持久化(二)

    前言 上一节我们简单介绍了RabbitMQ和在安装后启动所出现的问题,本节我们开始正式进入RabbitMQ的学习,对于基本概念请从官网或者其他前辈博客上查阅,我这里不介绍基础性东西,只会简单提一下,请 ...

  7. 浅谈surging服务引擎中的rabbitmq组件和容器化部署

    1.前言 上个星期完成了surging 的0.9.0.1 更新工作,此版本通过nuget下载引擎组件,下载后,无需通过代码build集成,引擎会通过Sidecar模式自动扫描装配异构组件来构建服务引擎 ...

  8. .NET 环境中使用RabbitMQ 转发 http://www.cnblogs.com/yangecnu/p/4227535.html

    .NET 环境中使用RabbitMQ   在企业应用系统领域,会面对不同系统之间的通信.集成与整合,尤其当面临异构系统时,这种分布式的调用与通信变得越发重要.其次,系统中一般会有很多对实时性要求不高的 ...

  9. 二、消息队列之如何在C#中使用RabbitMQ

    1.什么是RabbitMQ.详见 http://www.rabbitmq.com/. 作用就是提高系统的并发性,将一些不需要及时响应客户端且占用较多资源的操作,放入队列,再由另外一个线程,去异步处理这 ...

  10. Python中使用RabbitMQ

    一 RabbitMQ简介 RabbitMQ是一个在AMQP基础上完整的,可复用的企业消息系统.他遵循Mozilla Public License开源协议. MQ全称为Message Queue, 消息 ...

随机推荐

  1. vscode unity omnisharp 配置问题,折腾两天终于解决了

    一怒之下我恢复了电脑的出厂设置,重新配置一遍后还是报错, Could not locate MSBuild instance to register with OmniSharp. The .NET ...

  2. SpringCloud GateWay网关(入门)

    1.介绍 强烈推荐,看官网文档 Spring Cloud Gateway ①简介 Cloud全家桶里有个重要组件:网关 SpringCloud Gateway基于WebFlux框架 WebFlux底层 ...

  3. STM32F4寄存器初始化:编码器

    RCC->APB1ENR|=1<<0; //TIM2时钟使能 RCC->APB1ENR|=1<<1; //TIM3时钟使能 RCC->APB1ENR|=1&l ...

  4. STM32F0库函数初始化系列:GPIO配置

    1 void GPIO_Configuration(void) 2 { 3 RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE); 4 RCC_AHBP ...

  5. EPICS Archiver Appliance 单点极限储存速率测试

    https://blog.csdn.net/weixin_43767046/article/details/113748775 这个测试一直在进行,虽然因为摸数据库设置而重启过并清过库,但读示波器波形 ...

  6. 修改Element - plus的样式

    把显示再浏览器上的对应css选择器全部写上,并且添加 !important </script> <style lang='scss' scoped> //修改 element ...

  7. H3C MS4300V2配置mac地址与接口绑定

    配置mac地址与接口绑定 例: <h3c>system-view     //进入系统视图 [h3c]int g 1/0/45 //进入45接口 [h3c-GigabitEthernet1 ...

  8. [POI2014]HOT-Hotels 加强版

    长链剖分优化 \(dp\) 模板 不过这 \(dp\) 真毒 \(\text{Code}\) #include <cstdio> #define RE register #define I ...

  9. STM32L431 移植 LiteOS 时 _ebss _Min_Heap_Size _Min_Stack_Size 未找到或未定义

    将 LiteOS 移植完成之后,编译报如下错误: 环境 版本 Keil V5.37.0.0 Windows11 2022/12/22 ARM::CMSIS 5.9(2022-05-22) 开发板 ST ...

  10. 大道至简的架构设计思想之:封装(C系架构设计法,sishuok)

    一起来看看大道至简的一些基本设计思想,首先我们来看一下什么是封装. 封装:也叫做信息隐藏,或者数据访问保护.放到程序上来讲,就是隐藏类的属性,还有实现细节,仅对外公开一些接口.那么外部,就只能通过这个 ...