MassTransit 入门(一)
- MassTransit是一个面向.net的免费开源分布式应用程序框架。
- MassTransit使得创建应用程序和服务变得很容易,这些应用程序和服务利用基于消息的、松散耦合的异步通信来获得更高的可用性、可靠性和可伸缩性。
- MassTransit 8.x版本。
实现简单发布订阅
- 添加Nuget包引用:
- MassTransit
- MassTransit.RabbitMQ(演示也可基于内存)
生产端
- 配置MassTransit
builder.Services.AddMassTransit(x =>
{
// 使用内存
//x.UsingInMemory();
// 使用RabbitMq
x.UsingRabbitMq((context, config) =>
{
config.Host("rabbitmq://localhost:5672", host =>
{
host.Username("admin");
host.Password("admin");
});
});
});
- 定义消息体
public class OrderEto
{
public Guid Id { get; init; }
public string Name { get; set; }
public DateTime CreationTime { get; set; }
}
- 发布消息
[ApiController]
[Route("[controller]")]
public class PublishController : ControllerBase
{
private readonly ILogger<PublishController> _logger;
private readonly IPublishEndpoint _publishEndpoint;
public PublishController(ILogger<PublishController> logger, IPublishEndpoint publishEndpoint)
{
_logger = logger;
_publishEndpoint = publishEndpoint;
}
[HttpGet]
public async Task Get()
{
await _publishEndpoint.Publish<OrderEto>(new OrderEto()
{
Id = Guid.NewGuid(),
Name = "Phone",
CreationTime = DateTime.Now
});
}
}
消费者端
builder.Services.AddMassTransit(x =>
{
// 通过扫描程序集注册消费者
x.AddConsumers(typeof(Program).Assembly);
// 通过类型单个注册消费者
// x.AddConsumer<OrderEtoConsumer>(typeof(OrderEtoConsumerDefinition));
// x.SetKebabCaseEndpointNameFormatter();
// 通过泛型单个注册消费者
//x.AddConsumer<OrderEtoConsumer, OrderEtoConsumerDefinition>();
// 通过指定命名空间注册消费者
// x.AddConsumersFromNamespaceContaining<OrderEtoConsumer>();
// 使用内存队列
// x.UsingInMemory();
x.UsingRabbitMq((context, config) =>
{
config.Host("rabbitmq://localhost:5672", hostconfig =>
{
hostconfig.Username("admin");
hostconfig.Password("admin");
});
config.ConfigureEndpoints(context);
});
});
- 消费者定义
public class OrderEtoConsumer : IConsumer<OrderEto>
{
private readonly ILogger<OrderEtoConsumer> _logger;
public OrderEtoConsumer(ILogger<OrderEtoConsumer> logger)
{
_logger = logger;
}
public Task Consume(ConsumeContext<OrderEto> context)
{
_logger.LogInformation($"MassTransit.Consumer.One 收到消息:{JsonSerializer.Serialize(context.Message)}");
return Task.CompletedTask;
}
}
public class OrderEtoConsumerDefinition : ConsumerDefinition<OrderEtoConsumer>
{
protected override void ConfigureConsumer(IReceiveEndpointConfigurator endpointConfigurator, IConsumerConfigurator<OrderEtoConsumer> consumerConfigurator)
{
endpointConfigurator.UseMessageRetry(r => r.Intervals(500, 1000));
}
}

Abp Vnext Vue实现
MassTransit 入门(一)的更多相关文章
- MassTransit入门
.NET平台ESB框架的中文资料少的可怜,NServiceBus的有几篇,MassTransit的根本找不到,只好硬着头皮看官方的英文文档,顺便翻译出来加深理解. 欢迎拍砖. MassTransit是 ...
- MassTransit RabbitMQ 参考文档
Autofac http://docs.autofac.org/en/latest/lifetime/startup.html RabbitMQ http://www.rabbitmq.com/dot ...
- 译MassTransit 快速入门
给我看代码! 下面是MassTransit的功能设置. public class YourMessage { public string Text { get; set; } } public cla ...
- MassTransit 实现发布/订阅
MassTransit 介绍 先看下masstransit 官网介绍:MassTransit 是一个自由.开源.轻量级的消息总线, 用于使用. NET 框架创建分布式应用程序.MassTransit ...
- Angular2入门系列教程7-HTTP(一)-使用Angular2自带的http进行网络请求
上一篇:Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数 感觉这篇不是很好写,因为涉及到网络请求,如果采用真实的网络请求,这个例子大家拿到手估计还要自己写一个web ...
- ABP入门系列(1)——学习Abp框架之实操演练
作为.Net工地搬砖长工一名,一直致力于挖坑(Bug)填坑(Debug),但技术却不见长进.也曾热情于新技术的学习,憧憬过成为技术大拿.从前端到后端,从bootstrap到javascript,从py ...
- Oracle分析函数入门
一.Oracle分析函数入门 分析函数是什么?分析函数是Oracle专门用于解决复杂报表统计需求的功能强大的函数,它可以在数据中进行分组然后计算基于组的某种统计值,并且每一组的每一行都可以返回一个统计 ...
- Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数
上一篇:Angular2入门系列教程5-路由(一)-使用简单的路由并在在路由中传递参数 之前介绍了简单的路由以及传参,这篇文章我们将要学习复杂一些的路由以及传递其他附加参数.一个好的路由系统可以使我们 ...
- Angular2入门系列教程5-路由(一)-使用简单的路由并在在路由中传递参数
上一篇:Angular2入门系列教程-服务 上一篇文章我们将Angular2的数据服务分离出来,学习了Angular2的依赖注入,这篇文章我们将要学习Angualr2的路由 为了编写样式方便,我们这篇 ...
随机推荐
- nexus3上传第三方jar包
1.新建第三方仓库,名字叫3rd_part 2.添加到maven-public组中 3.修改maven的setting.xml 4.执行命令 mvn deploy:deploy-file -Dgrou ...
- spring——使用注解开发
注意:spring4之后,使用注解开发需要导入AOP包org.springframework:spring-aop:5.2.5.RELEASE以及context约束,增加注解的支持 <?xml ...
- linux mac 命令行 远程连接ssh提示IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY解决
➜ ~ ssh adleytales@192.168.1.10 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNIN ...
- 【SVN】Please execute the 'Cleanup' command.
背景 项目有个新的bug,我需要提取一个新的分支,但是提取之后,更新分支出现了这个问题 Please execute the 'Cleanup' command. 原因 由于使用SVN更新文件出错,导 ...
- 嵌入式linux驱动开发 笔记
@ 目录 首个驱动hellodrv 1.编写源码 2.编译模块 3.加载驱动 首个驱动hellodrv 3.如果下载不到,就自己编写,并编译驱动. 1.编写源码 2.编译模块 1.先写makefile ...
- python 发送POST请求
#博客地址:https://blog.csdn.net/qq_36374896 import urllib.request import urllib.parse url = "http:/ ...
- 面试问题之计算机网络:简述TCP和UDP的区别以及优缺点
转载于:https://blog.csdn.net/liulin1207/article/details/80960964 一.TCP: TCP是面向连接的通讯协议,通过三次握手建立连接,通讯完成时四 ...
- Java中8种基本数据类型是哪些
1 public class Ceshi { 2 int a; 3 double b; 4 boolean c; 5 char d; 6 float f; 7 byte e; 8 long h; 9 ...
- C++中类所占的内存大小以及成员函数的存储位置
类所占内存的大小是由成员变量(静态变量除外)决定的,虚函数指针和虚基类指针也属于数据部分,成员函数是不计算在内的.因为在编译器处理后,成员变量和成员函数是分离的.成员函数还是以一般的函数一样的存在.a ...
- c++中“::”和“:”啥意思
c++中"::"和":"啥意思 (1)"::" 1)类作用域操作符."::"指明了成员函数所属的类.如:M::f(s) ...