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. C-05\函数的底层原理

    一.程序运行时内存四大区 wres(内存属性): w:write(可写) r:read(可读) e:execute(可执行) s:share(可共享) 任何操作系统(windows.liunx.安卓. ...

  2. 20个 Git 命令玩转版本控制

    想要在团队中处理代码时有效协作并跟踪更改,版本控制发挥着至关重要的作用.Git 是一个版本控制系统,可以帮助开发人员跟踪修订.识别文件版本,并在必要的时候恢复旧版本.Git 对于有一定编程经验的用户来 ...

  3. 解决VS2019 DevExpress工具不显示问题

    一.序言 环境:NetFramework4.5,vs2019社区板 ,DevExpress 14.2.3 项目类型:winfrom 二.解决 找到DevExpress安装路径下的Bin\Framewo ...

  4. vue2安装sass 预编译

    步骤一: 安装node-sass.sass-loader.style-loader npm i node-sass sass-loader style-loader --save-dev 步骤二: 打 ...

  5. NESSUS安装破解_Windows(Linux一直没成功)

    一.安装 1. nessus官网下载安装包https://www.tenable.com/downloads/nessus ps:我是8.*版本的,然后找对应的系统下载安装包 2.点击安装包进行安装, ...

  6. JZOJ 2022.01.21【提高A组】模拟

    简要题解加心得 不得不说这是我打得比较痛苦且改得比较痛苦的一套题了 \(\text{T1 1085. [GDOI2008]彩球游戏}\) 整整改了三个半小时 直接崩溃了 明明本地可以跑过去,偏偏 \( ...

  7. layui级联操作

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <link re ...

  8. 指数分布的分布函数和概率密度函数的推导,牢记指数分布的分布函数为1-e^(-λx)

    指数分布的分布函数和概率密度函数的推导,牢记指数分布的分布函数为1-e^(-λx) 前言:重在记录,可能出错. 之前推导出了泊松分布的概率公式--泊松分布概率公式的推导,现在推导一下指数分布的分布函数 ...

  9. c# RegistryKey 的相关简单操作(转)

    c# RegistryKey 的相关简单操作   以下从'读''写''删除''判断'四个事例实现对注册表的简单操作 1.读取指定名称的注册表的值 private string GetRegistDat ...

  10. WPF使用WindowChrome自定义标题栏

    第一步:基本实现 添加Window的Style定义,并设置WindowChrome.WindowChrome属性: 设置WindowChrome标题栏: CaptionHeight--主要用于拖动有效 ...