Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么SpEL不能在springboot和springcloudstream@SendTo中工作_Java_Spring Boot_Rabbitmq_Spring El_Spring Cloud Stream - Fatal编程技术网

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
不能做类似的事情,但由于其他传输,它会更复杂。啊,我明白了。但是我必须自己管理队列的创建等等。。。我想我会用“手工”发送回复。谢谢