NSQ消息队列使用 #
一、安装 #
nuget安装包BLT.NSQ;
二、使用 #
2.1、添加NSQ服务 #
代码:
public void ConfigureServices(IServiceCollection services)
{
services.AddBLTNsq(_configuration);
}
2.2、生产者 #
public class ListingService
{
//注入
private readonly ISender _sender;
public ListingService(ISender sender)
{
_sender = sender;
}
[HttpPost("nsq/msg")]
public async Task SendToNsq([FromQuery] string msg)
{
//发送nsq消息,如消息是批量消息,请使用批量发送方法
await _sender.Send("dotnet-topic", msg);
}
}
2.3、消费者 #
注意:注入请使用App.GetService<T>();方法,请勿在构造方法上添加参数。
[Consumer("dotnet-topic", "test-channel", 100, 100)]//参数分别是 topic、管道名称(可自定义),预加载数量(预先从nsq获取的数量),线程数(同时处理消息的并发数);**线程数不应大于预加载数,否则意义不大**
public class NSQTestJob : IHandler //需要实现IHandler的接口
{
//消息处理
public Task HandleMessage(IMessage message)
{
//message.Body类型为byte[],需自行转换
string msg = Encoding.UTF8.GetString(message.Body);
Console.WriteLine(msg);
return Task.CompletedTask;
}
//失败消息
public Task LogFailedMessage(IMessage message)
{
Console.WriteLine(message);
return Task.CompletedTask;
}
}