Komunikacja między HostedService a webApi

0

Witam. Czy istnieję możliwość bezpośredniej komunikacji między HostedService a WebApi? Czy muszę do tego używać signalR lub rabbitaMQ?.

0

Chodzi mi o komunikację w obrębie jednego projektu, zarejestrowałem hosted service w startupie obecnego projektu.

0

Dobra, z tego co widzę najlepszym rozwiązaniem jest użycie MediatR albo Rabbita. Dzięki za pomoc @kzkzg

1

Mogłem jednak nie kasować tego posta :)
Nie wiem czy to jest najlepsze rozwiązanie. Skoro jest to w jednym projekcie to nie możesz sobie po prostu wstrzyknąć tego serwisu tam gdzie potrzebujesz? No i pytanie czy w ogóle chcesz użyć tego hosting service zgodnie w przeznaczeniem. Jesteś pewien że w ogóle jest potrzeba żeby się z nim komunikować?

0

Chciałem zrobić,Aby HostedService wysyłal komunikat kiedy przyjdzie nowa wiadomość(Imap) i wtedy wysyłać przez webapi lub signalr na front.Równie dobrze mogę wysyłać informację bezpośrednio z hostedService na front, ale chciałem zobaczyć czy się po prostu da przekazać to do controllera/serwisu. Nie mam pojęcia jak się wstrzykuje hostedService do kontrolera/serwisu. Powinienem to normalnie zarejestrować jako scoped w startupie a następnie wstrzykiwać w serwisie/kontrolerze?

1

Żadnego wstrzykiwania hostedservice, to ma działać w oddzielnym wątku od tego który obsługuje requesta, mediatr też raczej nie jest dobrym wyborem. Potrzebna jest jakiś broker wiadomości MSMQ albo Rabbitmq, albo jak nam nie zależy ne persystencji wiadomości w kolejce to można użyć współbieżnych kolekcji z TPL : BlockingCollection<T> z wstrzykniętą ConcurrentQueue<T>.

0

Znalazłem rozwiązanie/obejście problemu wstrzykiwania hosted service do serwisu.Do 2.0 nie było z tym problemu bo rejestracja była na singletona, ale od 2.1 zmienili na transient.

services.AddSingleton<HostedServices.MyService>();
services.AddHostedService(sp => sp.GetRequiredService<HostedServices.MyService>());

Tutaj rejestracia jest dwa razy ale instancja obiektu powstaje tylko raz. Nie wiem czy to jest rozwiązanie prawidłowe, ale działa. Z tego co widzę na gicie, gość z Mc mówi aby trzymac dane z hostedService w innym service i dopiero ten wstrzykiwac do innych serwisów/controllera. Daje link https://github.com/aspnet/Extensions/issues/553. @neves Czy nie ma jakiejś prostszej alternatywy niż rabbit?

1 użytkowników online, w tym zalogowanych: 0, gości: 1