0

Ich entwickle eine App in Service Fabric, die selbst gehostetes SignalR (über OWIN) verwendet, um Echtzeitdaten an einen Client zu senden.Pub/Sub und OWIN in Service Fabric

Unter meinen Microservices habe ich einen Stateless Service (S1), der Daten von einem Pub/Sub-Broker empfängt und diese Daten an Clients sendet, die über SignalR verbunden sind. Ich verwende this library, Pub/Sub in Service Fabric zu implementieren. Ich bin mir bewusst, dass ich Service Bus, RedisCache usw. als Pub/Sub-Anbieter verwenden könnte, aber mein Team hat beschlossen, alle Optionen außerhalb von Service Fabric zu vermeiden.

Nach this example gelang es mir, S1 erfolgreich als Abonnent einzurichten. Sobald ich jedoch den Code für den selbst gehosteten SignalR-Server hinzufüge, hört S1 auf, Daten von Pub/Sub zu empfangen.

ich den Fehler verengt habe bis auf den folgenden Code-Block:

protected override IEnumerable<ServiceInstanceListener> CreateServiceInstanceListeners() 
{ 
    // yield return new ServiceInstanceListener(serviceContext => new OwinCommunicationListener(Startup.ConfigureApp, serviceContext, ServiceEventSource.Current, "HttpEndpoint")); 
    yield return new ServiceInstanceListener(p => new SubscriberCommunicationListener(this, p), "StatelessSubscriberCommunicationListener"); 
    yield return new ServiceInstanceListener(context => new FabricTransportServiceRemotingListener(context, this, new FabricTransportRemotingListenerSettings() { EndpointResourceName = "PubSubEndpoint" }), "StatelessFabricTransportServiceRemotingListener"); 
} 

Wie dargestellt, der SignalR Server deaktiviert und das Pub/Sub funktioniert einwandfrei. Wenn Sie die Zeile aufheben, wird der SignalR-Server aktiviert und die Pub/Sub-Funktion funktioniert nicht mehr.

Kann mir jemand helfen zu verstehen, warum das passiert? Irgendwelche Ideen oder Vorschläge sind willkommen.

+0

"RedditCache" - Freudian Tippfehler? – Mardoxx

+0

@Mardoxx Danke für den Fang, behoben. –

+0

Können Sie versuchen, zuerst SubscriberCommunicationListener zu liefern? Das Framework liefert den Namen des Kommunikations-Listeners nicht an das Ziel, daher wird das erste verwendet. – LoekD

Antwort

0

Bitte geben Sie zuerst den SubscriberCommunicationListener ein. Das Framework liefert den Namen des Kommunikations-Listeners noch nicht an das Ziel, daher wird das erste verwendet.