我正试图在同一应用程序中使用来自不同PubSub主题的多条消息。其中一个是轮询的,其他应该是功能绑定。我的功能性消费者不起作用。
@Bean
public Consumer<MessageA> messageAMessageHandler() {
return message -> { ... }
}
@Scheduled(initialDelay = 60 * 1000, fixedRate = 600 * 1000)
public void pollBMessages() {
this.bMessageSource.b().poll(m -> { ... }, new ParameterizedTypeReference<MessageB>() {
});
}
我的应用程序yml:
spring:
cloud:
stream:
pubsub:
default:
consumer:
auto-create-resources: true
gcp:
pubsub:
bindings:
message-a-input:
consumer:
ack-mode: manual
bindings:
messageAMessageHandler-in-0:
destination: message-b-topic
group: my-service
message-a-input:
destination: message-a-topic
group: my-service
function:
definition: messageAMessageHandler;messageCMessageHandler
轮询基于注释的MessageSource工作得很好,但没有拾取函数绑定。在我的应用程序上下文中,它们是Beans,但cloudstream或gcp-pubsub会忽略它们。没有创建订阅,也没有使用消息。
我错过了什么?
由于轮询绑定器正在工作,您的代码中可能有@EnabledBinding
注释。如果您查看应用程序输出,您会看到这样的消息:
onConfiguration$FunctionBindingRegistrar : Functional binding is disabled due to the presense of @EnableBinding annotation in your configuration.
Spring Cloud Stream不支持混合传统(基于注释(和函数绑定样式。