SignalR клиент не получает сообщения через MassTransit
У меня есть проблема с отправкой сообщений клиентам SignalR через MassTransit. Всё сделано согласно документации.
Есть Сервис А, который генерирует событие. Данное событие через MassTransit ловит Сервис Б. Далее Сервис Б должен сделать рассылку клиентам SignalR. Так вот Событие успешно доходит до сервиса Б и он якобы делает рассылку клиентам SignalR. Но до клиентов сообщение не доходит.
Что-то я видимо делаю не так или не до конца понимаю как работает MassTransit + SignalR. Если кто сталкивался, подскажите в чем может быть проблема?
Ответы (1 шт):
чтобы выполнить рассылку клиентам SignalR, вам нужно:
- Внедрить зависимость из SignalR (IHubContext) в класс-обработчик сообщения MassTransit (BroadcastMessageConsumer)
- При получении сообщения (Метод Consume) выполнить рассылку в необходимый хаб SignalR
- Написать клиентский код для подключения к хабу SignalR (TypeScript, JS, C#)
- Ожидать в клиенте вызов метода client_side_method_name()
Ваш код Потребителя сообщений на сервере будет выглядеть примерно так:
public class BroadcastMessageConsumer : IConsumer<BroadcastMessageModel>
{
private readonly IHubContext<YourHub> _hubContext;
public BroadcastMessageConsumer(IHubContext<YourHub> hubContext)
{
_hubContext = hubContext;
}
public Task Consume(ConsumeContext<BroadcastMessageModel> context)
{
_hub.Clients.All.SendAsync("client_side_method_name", "your data");
return Task.CompletedTask;
}
}
Код клиента:
ngOnInit(): void
{
this.getEmployeeData();
const connection = new signalR.HubConnectionBuilder()
.withUrl('http://localhost:5000/yourHub')
.build();
connection.start().then(function() {
console.log('SignalR Connected!');
}).catch (function (err) {
return console.error(err.toString());
});
connection.on("client_side_method_name", () => {
this.doSomething();
});
}
doSomething() { }