2016-05-26 9 views

Antwort

1

Nicht sicher, was Sie hier durch Abfangen meinen - beide Beispiele, die Sie geben, sind nicht nachrichtenbasiert :).

Aber Sie möchten Zugriff auf die vollständige Nachricht erhalten, können Sie das als Argument für eine @StreamListener oder @ServiceActivator -annotated-Methode verwenden. Mit Spring Cloud Stream können Sie außerdem eine vollständige Spring Integration-Pipeline einrichten, sodass Sie Ratschläge und alles, was Sie benötigen, hinzufügen können - siehe hier: https://github.com/spring-projects/spring-integration-java-dsl/wiki/Spring-Integration-Java-DSL-Reference.

Ich würde Sie ermutigen, einen Blick auf die Spring Integration Referenz sowie http://docs.spring.io/autorepo/docs/spring-integration/4.2.6.RELEASE/reference/html/ zu werfen. Der Spring Cloud Stream injiziert die Kanäle automatisch und von dort aus haben Sie volle Freiheit bei der Konstruktion Ihrer Pipeline.

hoffte, das hilft, Marius

+0

Ja, ich habe vor ein paar Stunden angefangen, die Spring Integration zu lesen, und ich denke, die Antwort ist GlobalChannelInterceptor. Interceptor ist ein übliches Entwurfsmuster. es ist im Grunde, wenn Sie eine Anfrage oder Nachricht vor oder nach der Verarbeitung erhalten. –

+1

Ja, in diesem Fall sollte ein '@ GlobalChannelInterceptor' hilfreich sein. –

7

War in der Lage ein- und ausgehende Frühling Cloud-Stream-Nachrichten, die die GlobalChannelInterceptor Annotation und ChannelInterceptor Schnittstelle abzufangen. Siehe Beispiel unten.

import org.springframework.integration.config.GlobalChannelInterceptor; 
import org.springframework.messaging.Message; 
import org.springframework.messaging.MessageChannel; 
import org.springframework.messaging.support.ChannelInterceptor; 
import org.springframework.stereotype.Component; 

@Component 
@GlobalChannelInterceptor 
public class Interceptor implements ChannelInterceptor { 

    private final Logger log = LoggerFactory.getLogger(Interceptor.class); 

    @Override 
    public Message<?> preSend(Message<?> msg, MessageChannel mc) { 
     log.info("In preSend"); 
     return msg; 
    } 

    @Override 
    public void postSend(Message<?> msg, MessageChannel mc, boolean bln) { 
     log.info("In postSend"); 
    } 

    @Override 
    public void afterSendCompletion(Message<?> msg, MessageChannel mc, boolean bln, Exception excptn) { 
     log.info("In afterSendCompletion"); 
    } 

    @Override 
    public boolean preReceive(MessageChannel mc) { 
     log.info("In preReceive"); 
     return true; 
    } 

    @Override 
    public Message<?> postReceive(Message<?> msg, MessageChannel mc) { 
     log.info("In postReceive"); 
     return msg; 
    } 

    @Override 
    public void afterReceiveCompletion(Message<?> msg, MessageChannel mc, Exception excptn) { 
     log.info("In afterReceiveCompletion"); 
    } 

} 
Verwandte Themen