我正在使用带有Azure服务.net5的Masstransit。
我有两个应用程序:
Web Api。启动:
services.AddMassTransit(x =>
{
x.UsingAzureServiceBus((context,cfg) =>
{
cfg.Host("Endpoint");
cfg.ReceiveEndpoint("mytopic", e =>
{
e.PrefetchCount = 100;
e.MaxConcurrentCalls = 100;
});
cfg.ConfigureEndpoints(context);
});
});
services.AddMassTransitHostedService();Web Api。事件发布控制器:
[HttpGet]
public async Task<bool> Get()
{
await _bus.Publish(new Message()
{
Name = "Test Name",
Description = "Test Description",
Order = 1
});
return true;
}Worker服务。程序:
services.AddMassTransit(x =>
{
x.AddConsumer<MessageConsumer>();
x.UsingAzureServiceBus((context,cfg) =>
{
cfg.Host("Endpoint");
cfg.UseServiceBusMessageScheduler();
cfg.ReceiveEndpoint("mytopic", e =>
{
e.PrefetchCount = 100;
e.MaxConcurrentCalls = 100;
e.ConfigureConsumer<MessageConsumer>(context);
});
cfg.ConfigureEndpoints(context);
});
});
services.AddMassTransitHostedService(true);Worker服务。消费者:
public class MessageConsumer : IConsumer<Message>
{
readonly ILogger<MessageConsumer> _logger;
public MessageConsumer(ILogger<MessageConsumer> logger)
{
_logger = logger;
}
public async Task Consume(ConsumeContext<Message> context)
{
_logger.LogInformation("Received Text: {Text}", context.Message.Name);
}
}两个应用程序都有事件类(代码中的消息类),它们位于相同的名称空间中。
namespace EventBusMessages
{
public class Message
{
public string Name { get; set; }
public string Description { get; set; }
public int Order { get; set; }
}
}成功发送和处理一条消息后,下一条消息被放入队列***_skipped。则再次成功处理下一条消息,但随后再次执行***_skipped。
发布控制台示例:
[05:26:19 DBG] SEND sb://test.servicebus.windows.net/EventBusMessages/Message c7710000-e64a-00ff-df61-08d92e12a05d EventBusMessages.
Message
[05:26:20 DBG] SEND sb://test.servicebus.windows.net/EventBusMessages/Message c7710000-e64a-00ff-216c-08d92e12a182 EventBusMessages.
Message
[05:26:20 DBG] SKIP sb://test.servicebus.windows.net/mytopic c7710000-e64a-00ff-216c-08d92e12a182
[05:26:21 INF] MOVE sb://test.servicebus.windows.net/mytopic c7710000-e64a-00ff-216c-08d92e12a182 mytopic_skipped dead-letter
[05:26:22 DBG] SEND sb://test.servicebus.windows.net/EventBusMessages/Message c7710000-e64a-00ff-fc4d-08d92e12a27a EventBusMessages.
Message
[05:26:23 DBG] SEND sb://test.servicebus.windows.net/EventBusMessages/Message c7710000-e64a-00ff-d1a8-08d92e12a30b EventBusMessages.
Message
[05:26:23 DBG] SKIP sb://test.servicebus.windows.net/mytopic c7710000-e64a-00ff-d1a8-08d92e12a30b
[05:26:23 INF] MOVE sb://test.servicebus.windows.net/mytopic c7710000-e64a-00ff-d1a8-08d92e12a30b mytopic_skipped dead-letter05:26:19和05:26:22已被消费者成功处理,但05:26:20和05:26:23已被跳过并移至***_skipped队列
消费者控制台示例:
[05:26:19 DBG] RECEIVE sb://test.servicebus.windows.net/mytopic c7710000-e64a-00ff-df61-08d92e12a05d EventBusMessages.Message EventB
usSubscriber.MessageConsumer(00:00:00.0126036)
[05:26:22 INF] Received Text: Test Name
[05:26:22 DBG] RECEIVE sb://test.servicebus.windows.net/mytopic c7710000-e64a-00ff-fc4d-08d92e12a27a EventBusMessages.Message EventB
usSubscriber.MessageConsumer(00:00:00.0042202)再一次,我每次都发送相同的消息
非常感谢你的回复
发布于 2021-06-13 10:41:10
Web API项目不应具有接收终结点- it未配置使用者。因此接收端点将跳过每条消息。只有在拥有使用者时,才能配置接收终结点。
而且您只需要在添加了消费者之后调用ConfigureEndpoints。
https://stackoverflow.com/questions/67954374
复制相似问题