Java 为什么SpEL不能在springboot和springcloudstream@SendTo中工作
我已经创建了以下代码和匹配的配置。消息的接收效果很好,但是根本不计算Java 为什么SpEL不能在springboot和springcloudstream@SendTo中工作,java,spring-boot,rabbitmq,spring-el,spring-cloud-stream,Java,Spring Boot,Rabbitmq,Spring El,Spring Cloud Stream,我已经创建了以下代码和匹配的配置。消息的接收效果很好,但是根本不计算SpEL,因此创建了一个以表达式作为名称的新交换 查看我的依赖项版本,@SendTo注释应该支持这种表达式 我做错了什么 我正在使用RabbitMQ和springboot1.4.3 @EnableBinding(CommandChannel.class) public class CommandSink { private static final Logger LOGGER = LoggerFactory.getLo
SpEL
,因此创建了一个以表达式作为名称的新交换
查看我的依赖项版本,@SendTo
注释应该支持这种表达式
我做错了什么
我正在使用RabbitMQ
和springboot1.4.3
@EnableBinding(CommandChannel.class)
public class CommandSink {
private static final Logger LOGGER = LoggerFactory.getLogger(CommandSink.class);
@StreamListener(CommandChannel.INPUT)
@SendTo("!{request.messageProperties.headers['reply_to']}")
public String processCommand(@Payload String cmd, @Header("reply_to") String replyToQueue){
LOGGER.info("Got a {} command and I'll reply to {}", cmd, replyToQueue);
String result = "geil: " + cmd;
return result;
}
}
我做错了什么
什么都没有;bean后处理器中根本没有代码来计算那里的SpEL表达式;该值是目标(通道名称)的简单字符串值
是什么让你相信SpEL得到了支持?我很难解析这个
查看我的依赖项版本,@SendTo注释应该支持这种表达式
RabbitMQ的Spring流基于Spring Amqp。该文档清楚地说明了这一点:您将两种不同的技术混为一谈。这是在
@RabbitListener
的上下文中;@StreamListener
是另一种野兽。而SCSt可以使用RabbitMQ作为传输;这只是一种选择(卡夫卡等)。@StreamListener
对RabbitMQ一无所知。当然,您可以使用@RabbitListener
;在这种情况下,您不需要逻辑来选择replyTo—它将自动使用,@SendTo
仅用于没有replyTo
的邮件。我并不是说@StreamListener
不能做类似的事情,但由于其他传输,它会更复杂。啊,我明白了。但是我必须自己管理队列的创建等等。。。我想我会用“手工”发送回复。谢谢