Comunicação entre dois hubs principais do signalR
Eu tenho dois aplicativos SignalR Core Typescript (A & B) com seu próprio SignalR Core C# Hub (C & D).
Não, eu quero acionar algo de A em B. Meu plano era enviar a mensagem de acionamento de A para C, então C redireciona para D e envia para B. O mesmo deve ser possível na outra direção também.
Os hubs são independentes um do outro, portanto, tornar um hub parte do outro não funciona para mim. A única solução que encontrei é usar dois SignalR Core C # Clients para se comunicar entre os hubs, mas isso parece uma grande sobrecarga. Ou é o caminho a seguir?
Respostas
Eu tenho dois aplicativos SignalR Core Typescript (A & B) com seu próprio SignalR Core C# Hub (C & D).
Não, eu quero acionar algo de A em B.
Você pode consultar as seguintes abordagens possíveis para atingir o requisito acima.
Abordagem 1: modifique sua implementação e mescle a funcionalidade existente em uma única classe Hub, então você pode fazer com que os aplicativos cliente SignalR Typescript (A & B) se conectem ao mesmo servidor hub e se comuniquem entre si.
Abordagem 2: estabelecer conexões com o Hub C e o Hub D nos aplicativos cliente SignalR Typescript (A e B) para cada usuário cliente, de modo que o usuário que usa o aplicativo cliente Typescript A também possa se comunicar com os usuários do aplicativo cliente Typescript B.
Abordagem 3: como você mencionou, instale o pacote Microsoft.AspNetCore.SignalR.Client e implemente a lógica do cliente SignalR .NET no projeto do servidor Hub (A & B), o que os faria agir tanto como servidor quanto como cliente SignalR .NET.
Abordagem 4: como @Kiril1512 mencionou, pode implementar a lógica do cliente SignalR .NET em um projeto separado que pode ser um trabalho baseado em fila (ou baseado em servicebus etc). Se o usuário do aplicativo cliente SignalR Typescript A quiser se comunicar com os usuários do aplicativo cliente SignalR Typescript B conectando-se ao Hub D, ele pode enviar uma mensagem específica ao Hub C para adicionar uma nova mensagem de fila e, em seguida, acionará esse trabalho para invocar o método Hub de Servidor central D para enviar mensagens para usuários específicos do aplicativo cliente SignalR Typescript B, como abaixo.

Em primeiro lugar, esta é uma questão de opinião, então talvez seja encerrada.
Mas acredito que a melhor abordagem é usar algo como Service Bus
e implementar a comunicação baseada em eventos. Então, algo acontece em A e você invoca o método hub em C, então envia um evento para D e ele será acionado via signalR
A. O uso do barramento de eventos adicionará a opção de adicionar, por exemplo, outro hub (E) que poderia receber esses eventos e fazer algo mais.