如何拦截 Spring 云流消息?
How to intercept Spring Cloud Stream messages?
Spring 允许拦截其许多产品的消息,例如 RestTemplate 和 SpringMVC。是否可以拦截 Spring Cloud Stream 消息?对于传入和传出消息。
不确定这里所说的拦截是什么意思 - 您给出的两个示例都不是基于消息的:)。
但是您想要访问完整消息,您可以将其用作 @StreamListener
或 @ServiceActivator
注释方法的参数。此外,Spring Cloud Stream 允许您设置完整的 Spring 集成管道,因此您可以添加建议和所需的一切 - 请参见此处:https://github.com/spring-projects/spring-integration-java-dsl/wiki/Spring-Integration-Java-DSL-Reference.
我建议您也看看 Spring 集成参考 http://docs.spring.io/autorepo/docs/spring-integration/4.2.6.RELEASE/reference/html/。 Spring Cloud Stream 自动注入通道,从那里您可以完全自由地构建管道。
希望这对您有所帮助,
马吕斯
能够使用 GlobalChannelInterceptor
注释和 ChannelInterceptor
接口拦截入站和出站 Spring 云流消息。请参阅下面的示例。
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");
}
}
Spring 允许拦截其许多产品的消息,例如 RestTemplate 和 SpringMVC。是否可以拦截 Spring Cloud Stream 消息?对于传入和传出消息。
不确定这里所说的拦截是什么意思 - 您给出的两个示例都不是基于消息的:)。
但是您想要访问完整消息,您可以将其用作 @StreamListener
或 @ServiceActivator
注释方法的参数。此外,Spring Cloud Stream 允许您设置完整的 Spring 集成管道,因此您可以添加建议和所需的一切 - 请参见此处:https://github.com/spring-projects/spring-integration-java-dsl/wiki/Spring-Integration-Java-DSL-Reference.
我建议您也看看 Spring 集成参考 http://docs.spring.io/autorepo/docs/spring-integration/4.2.6.RELEASE/reference/html/。 Spring Cloud Stream 自动注入通道,从那里您可以完全自由地构建管道。
希望这对您有所帮助, 马吕斯
能够使用 GlobalChannelInterceptor
注释和 ChannelInterceptor
接口拦截入站和出站 Spring 云流消息。请参阅下面的示例。
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");
}
}