Spring Cloud Stream @SendTo注释不起作用

我在Spring Boot中使用Spring Cloud Stream。我的申请很简单:

ExampleService.class:

@EnableBinding(Processor1.class)

@Service

public class ExampleService {

@StreamListener(Processor1.INPUT)

@SendTo(Processor1.OUTPUT)

public String dequeue(String message){

System.out.println("New message: " + message);

return message;

}

@SendTo(Processor1.OUTPUT)

public String queue(String message){

return message;

}

}

Procesor1.class:

public interface Processor1 {

String INPUT = "input1";

String OUTPUT = "output1";

@Input(Processor1.INPUT)

SubscribableChannel input1();

@Output(Processor1.OUTPUT)

MessageChannel output1();

}

application.properties:

spring.cloud.stream.bindings.input1.destination=test_input

spring.cloud.stream.bindings.input1.group=test_group

spring.cloud.stream.bindings.input1.binder=binder1

spring.cloud.stream.bindings.output1.destination=test_output

spring.cloud.stream.bindings.output1.binder=binder1

spring.cloud.stream.binders.binder1.type=rabbit

spring.cloud.stream.binders.binder1.environment.spring.rabbitmq.host =本地主机

场景:

1)当我在“ test_input.test_group”队列中推送消息时,消息已正确打印并正确发送到“

test_output”交换。所以ExampleService :: dequeue运作良好。

2)当我调用ExampleService :: queue方法(从类外部,在测试中)时,消息永远不会发送到“ test_output”交换。

我正在使用Spring Boot 2.0.6.RELEASE和Spring Cloud Stream 2.0.2.RELEASE。

有人知道为什么方案2)无法正常工作吗?提前致谢。

回答:

是什么使您认为@SendTo自己受支持?@SendTo是许多项目使用的辅助注释,而不仅仅是Spring Cloud

Stream;据我所知,没有什么可以自己寻找的。

尝试使用Spring Integration的@Publisher注释(带有@EnablePublisher)。

要强制使用CGLIB而不是JDK代理进行代理,您可以执行此操作…

@Bean

public static BeanFactoryPostProcessor bfpp() {

return bf -> {

bf.getBean(IntegrationContextUtils.PUBLISHER_ANNOTATION_POSTPROCESSOR_NAME,

PublisherAnnotationBeanPostProcessor.class).setProxyTargetClass(true);

};

}

以上是 Spring Cloud Stream @SendTo注释不起作用 的全部内容, 来源链接: utcz.com/qa/426776.html

回到顶部