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的路由 为了编写样式方便,我们这篇 ...
随机推荐
- Mybatis使用注解开发(未完)
使用注解来映射简单语句会使代码显得更加简洁,但对于稍微复杂一点的语句,Java 注解不仅力不从心 注解在接口实现 @Select("SELECT * FROM user") Lis ...
- 马哥教育Linux网络班结业考试(架构师)-简答题题目(附答案)
1.叙述 centos7 启动图形界面的开机启动流程? 答:新版本的CentOS7里,已经做了调整.具体/etc/inittab 文件的第7行已经做出了说明: 系统已经使用'targets' 取代了运 ...
- UVA1389 Hard Life (01分数规划+最大流)
UVA1389 Hard Life (01分数规划+最大流) Luogu 题目描述略 题解时间 $ (\frac{\Sigma EdgeCount}{\Sigma PointCount})_{max} ...
- 如何移植sshserver到嵌入式平台
ssh解释说明 SSH 为 Secure Shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定:SSH 为建立在应用层基础上的安全协议.SSH 是较可靠,专 ...
- 面试问题之计算机网络:TCP滑动窗口
滑动窗口协议是传输层进行流量控制的一种措施,接收方通过通知发送方自己的窗口大小,从而控制发送方的发送速度,从而达到防止发送方发送速度过快而导致自己被淹没的目的,并且滑动窗口分为接收窗口和发送窗口.TC ...
- mybatis-数据库类型的对应关系
- mysqlbench无法启动
mysqlbean双击没有反应,应用无法启动,缺少3要素 都缺什么呢?看这个MySQL官方链接:https://dev.mysql.com/doc/workbench/en/wb-installing ...
- 学习saltstack (三)
salt是一个新的基础平台管理工具,2011-02-20诞生,创造者Thoms SHatch,起名salt原因生活中常见.易记,使用saltstack.com原因这个域名没有被注册,Because s ...
- ACM - 最短路 - AcWing 851 spfa求最短路
AcWing 851 spfa求最短路 题解 以此题为例介绍一下图论中的最短路算法 \(Bellman\)-\(Ford\) 算法.算法的步骤和正确性证明参考文章最短路径(Bellman-Ford算法 ...
- CAN总线系列讲座第五讲——CAN总线硬件电路设计
CAN总线系列讲座第五讲--CAN总线硬件电路设计一 实战学习背景 CAN总线节点的硬件构成方案有两种,其中的方案:(1).MCU控制器+独立CAN控制器+CAN收发器.独立CAN控制器如SJA10 ...