2016-05-14 12 views
1

Wenn eine Nachricht mithilfe von ServiceStack an Redis gesendet wird, fügt das Framework alle Standardheader hinzu (Priority, , ...). Ist es jedoch möglich, dieser Nachricht benutzerdefinierte Header hinzuzufügen? Ich habe eine Reihe von Microservices, die Nachrichten untereinander weitergeben, und ich möchte eine gemeinsame Kopfzeile enthalten.Ist es möglich, einer ServiceStack Redis-Nachricht benutzerdefinierte Header hinzuzufügen?

Bisher habe ich die Implementierung meiner eigenen Version von IMessage oder IMessageFactory erkundet, und ich habe die verschiedenen Eigenschaften innerhalb von RedisMqServer untersucht, wenn ich es im IOC-Container aufbaute, aber ich muss noch irgendwo finden, dass ich ein neues hinzufügen kann Header.

Vielen Dank im Voraus!

Antwort

2

könnten Sie die IMessage.Tag verwenden alle benutzerdefinierten Tag-Text zu senden, zB:

using (var mqClient = mqServer.CreateMessageQueueClient()) 
{ 
    mqClient.Publish(new Message<HelloIntro>(new Hello { Name = "World" }) { 
     Tag = "Custom" 
    }); 
} 

Ansonsten habe ich hinzugefügt nur Unterstützung für das Senden von Benutzerdefinierte Header in this commit die nun auch benutzerdefinierte Header in der neuen schicken lassen IMessage.Meta Zeichenfolge Wörterbuch, zB:

using (var mqClient = mqServer.CreateMessageQueueClient()) 
{ 
    mqClient.Publish(new Message<HelloIntro>(new Hello { Name = "World" }) { 
     Meta = new Dictionary<string, string> { { "Custom", "Header" } } 
    }); 
} 

die Sie in Ihrem MQ zugreifen können RegisterHandler, zB:

mqServer.RegisterHandler<Hello>(m => 
    new Message<HelloResponse>(new HelloResponse { 
     Result = "Hello, {0}!".Fmt(m.GetBody().Name) 
    }) { 
     Meta = m.Meta 
    }); 

Ihr MQ-Handler kann jetzt auch eine IMessage Antwort zurückgeben, die eine vollständige Rundumauslösung von benutzerdefinierten Kopfzeilen ermöglicht.

Diese Änderung ist ab v4.0.57 verfügbar, jetzt available on MyGet.

+0

Dank @mythz! Ich werde definitiv auf die neueste Version von ServiceStack upgraden und die Meta-Eigenschaft nutzen müssen! Danke, dass Sie das in so kurzer Zeit umgesetzt haben! Ich war in der Lage, das Etikett gut zu Redis zu übergeben. Nun, in Bezug auf den Verbrauch ... habe ich Zugang über 'GlobalMessageRequestFilters'? Wie würde ich sonst darauf zugreifen, ohne es für jeden Handler auf den 'RegisterHandler' zu legen? Grund Ich frage auch, ich habe meine Handler so eingerichtet: 'message_server.RegisterHandler (ServiceController.ExecuteMessage);' Nochmals vielen Dank! – napo

+1

@napo Sie müssten "IRequest" in "BasicRequest" umwandeln, um auf die Eigenschaft "BasicRequest.Message" zuzugreifen. – mythz

+0

! Danke, das macht den Trick! Ich habe versucht, es als IMessage/Message zu schreiben und konnte nichts daraus machen. Jetzt kann ich es bekommen - perfekt! Nun, letzte Frage ... gibt es eine Möglichkeit, das Tag zu jeder Nachricht hinzuzufügen, also muss ich es nicht explizit zu jeder Nachricht hinzufügen, die ich erstelle? Danke noch einmal! – napo