Hej,
Taka sytuacja. Chciałem zakolejkować pewne operacje, w taki sposób, żeby szły one szeregowo, bez zrównoleglenia. Ustawiłem Prefetchcount na 1 w dwóch miejscach, przy tworzeniu busa i przy samej subskrypcji.
ConnectionConfiguration conConfig = new ConnectionConfiguration()
{
UserName = own_s.RABBIT_USER,
Password = own_s.RABBIT_PASSWORD,
VirtualHost = own_s.RABBIT_VHOST,
PrefetchCount = 1
};
_bus.PubSub.Subscribe<type>(
“topic”,
(req) => Service(req),
(cfg) => cfg.WithPrefetchCount(1));
Dla potrzeb testowych zrobiłem prostego callbacka:
async void Service(type msg)
{
var g = Guid.NewGuid();
Log.Information($"Callback started: {g}");
await Task.Delay(20000);
Log.Information($"Callback ended: {g}");
}
I co mam w logu:
[2023-05-09 22:21:18.998 +02:00 INF] Callback started: 1d2e702d-d8eb-4991-a606-4308348d8a56
[2023-05-09 22:21:30.066 +02:00 INF] Callback started: e43f4b10-ce0e-4ae1-a956-5c98028a9c7a
[2023-05-09 22:21:38.830 +02:00 INF] Callback started: 84004c21-1dd1-4819-b45c-d04e073ee3cf
[2023-05-09 22:21:39.002 +02:00 INF] Callback ended: 1d2e702d-d8eb-4991-a606-4308348d8a56
[2023-05-09 22:21:50.071 +02:00 INF] Callback ended: e43f4b10-ce0e-4ae1-a956-5c98028a9c7a
[2023-05-09 22:21:58.835 +02:00 INF] Callback ended: 84004c21-1dd1-4819-b45c-d04e073ee3cf
Wniosek oczywisty - subskrybent nie czeka na zakończenie przetwarzania wiadomości, tylko pobiera kolejne z kolejki, a przy takim a nie innym ustawieniu prefetchcount powinien czekać.
Czy ktoś miał podobny problem? Tutaj model jest prosty jak nie powiem co - wręcz makieta, albo tutorial - musi działać. A nie działa...
Kal