Reputation: 13
I am using Masstransit with Azure service .net5.
I have two applications:
Web Api. Startup:
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. Event Publish Controller:
[HttpGet]
public async Task<bool> Get()
{
await _bus.Publish(new Message()
{
Name = "Test Name",
Description = "Test Description",
Order = 1
});
return true;
}
Worker service. Program:
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 service. Consumer:
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);
}
}
Both applications have event class (Message class in code) which are in the same namespace.
namespace EventBusMessages
{
public class Message
{
public string Name { get; set; }
public string Description { get; set; }
public int Order { get; set; }
}
}
After successfully sending and processing a message, the next message is placed in the queue ***_skipped. Then next message is again processed successfully but then again ***_skipped.
Example of a Publish console:
[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-letter
05:26:19 and 05:26:22 were successfully processed by the consumer, but 05:26:20 and 05:26:23 have been skipped and moved to the ***_skipped queue
Example a Consumer console:
[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)
Again, I send the same message every time
do thanks for answer
Upvotes: 1
Views: 1718
Reputation: 33540
The Web API project should not have a receive endpoint – it has no consumers configured. So every message will be skipped by that receive endpoint. You only configure receive endpoints when you have consumers.
And you only need to call ConfigureEndpoints
when you've added consumers.
Upvotes: 3