RabbitMQ后台作业管理器
RabbitMQ是行业标准的消息代理工具。虽然它通常用于进程间通信(消息传递/分布式事件),但在以FIFO(先进先出)顺序存储和执行后台作业方面也非常实用。
ABP提供了Volo.Abp.BackgroundJobs.RabbitMQ NuGet包,用于通过RabbitMQ执行后台作业。
关于如何使用后台作业系统,请参阅 后台作业文档。本文档仅展示如何安装和配置RabbitMQ集成。
安装
使用ABP CLI将Volo.Abp.BackgroundJobs.RabbitMQ NuGet包添加到您的项目:
- 如果尚未安装,请先安装 ABP CLI
- 在需要添加
Volo.Abp.BackgroundJobs.RabbitMQ包的.csproj文件所在目录打开命令行(终端) - 运行
abp add-package Volo.Abp.BackgroundJobs.RabbitMQ命令
如需手动安装,请将 Volo.Abp.BackgroundJobs.RabbitMQ NuGet包安装到项目中,并在项目的 ABP模块 类中添加 [DependsOn(typeof(AbpBackgroundJobsRabbitMqModule))] 特性
配置
默认配置
默认配置会自动使用标准端口连接到本地RabbitMQ服务器(localhost)。这种情况下无需任何配置
RabbitMQ连接配置
您可以使用标准配置系统(如通过appsettings.json文件)或选项类来配置RabbitMQ连接
appsettings.json文件配置
这是配置RabbitMQ连接最简单的方式。由于支持Asp.Net Core支持的任何其他配置源(如环境变量),这种方式也非常强大
示例:配置默认RabbitMQ连接
{
"RabbitMQ": {
"Connections": {
"Default": {
"HostName": "123.123.123.123",
"Port": "5672"
}
}
}
}
您可以使用ConnectionFactry的任何属性作为连接属性。详细了解这些选项,请参阅RabbitMQ文档
允许定义多个连接。这种情况下,您可以为不同的后台作业类型使用不同的连接(参见下文AbpRabbitMqBackgroundJobOptions章节)
示例:声明两个连接
{
"RabbitMQ": {
"Connections": {
"Default": {
"HostName": "123.123.123.123"
},
"SecondConnection": {
"HostName": "321.321.321.321"
}
}
}
}
如需连接到RabbitMQ集群,可以使用;字符分隔主机名
示例:连接到RabbitMQ集群
{
"RabbitMQ": {
"Connections": {
"Default": {
"HostName": "123.123.123.123;234.234.234.234"
}
},
"EventBus": {
"ClientName": "MyClientName",
"ExchangeName": "MyExchangeName"
}
}
}
AbpRabbitMqOptions
AbpRabbitMqOptions类可用于配置RabbitMQ的连接字符串。您可以在模块的ConfigureServices方法中配置此选项
示例:配置连接
Configure<AbpRabbitMqOptions>(options =>
{
options.Connections.Default.UserName = "user";
options.Connections.Default.Password = "pass";
options.Connections.Default.HostName = "123.123.123.123";
options.Connections.Default.Port = 5672;
});
这些选项类可以与appsettings.json方式结合使用。在代码中配置选项属性会覆盖配置文件中的值
AbpRabbitMqBackgroundJobOptions
作业队列名称
默认情况下,每种作业类型使用独立的队列。队列名称通过标准前缀和作业名称组合计算得出。默认前缀为AbpBackgroundJobs.。因此,如果作业名称为EmailSending,则RabbitMQ中的队列名称为AbpBackgroundJobs.EmailSending
在后台作业参数类上使用
BackgroundJobName特性来指定作业名称。否则,作业名称将是作业类的完整名称(包含命名空间)
作业连接
默认情况下,所有作业类型都使用Default RabbitMQ连接
自定义配置
AbpRabbitMqBackgroundJobOptions可用于自定义作业使用的队列名称和连接
示例:
Configure<AbpRabbitMqBackgroundJobOptions>(options =>
{
options.DefaultQueueNamePrefix = "my_app_jobs.";
options.DefaultDelayedQueueNamePrefix = "my_app_jobs.delayed"
options.PrefetchCount = 1;
options.JobQueues[typeof(EmailSendingArgs)] =
new JobQueueConfiguration(
typeof(EmailSendingArgs),
queueName: "my_app_jobs.emails",
connectionName: "SecondConnection",
delayedQueueName:"my_app_jobs.emails.delayed"
);
});
- 此示例将默认队列名称前缀设置为
my_app_jobs.,默认延迟队列名称前缀设置为my_app_jobs.delayed。如果不同应用程序使用相同的RabbitMQ服务器,为每个应用程序使用不同的前缀非常重要,以避免相互消费作业 - 为所有队列设置
PrefetchCount - 同时为
EmailSendingArgs指定了不同的连接字符串
JobQueueConfiguration类的构造函数有一些附加选项:
queueName:此作业使用的队列名称。不添加前缀,因此需要指定队列的完整名称DelayedQueueName:用于作业延迟执行的延迟队列名称。不添加前缀,因此需要指定队列的完整名称connectionName:RabbitMQ连接名称(参见上面的连接配置)。此为可选参数,默认值为Defaultdurable(可选,默认:true)exclusive(可选,默认:false)autoDelete(可选,默认:false)PrefetchCount(可选,默认:null)
如需了解durable、exclusive和autoDelete选项的详细信息,请参阅RabbitMQ文档,但在大多数情况下,默认配置就是您需要的
抠丁客


