![](/img/trans.png)
[英]Spring Cloud Stream Producer adds “junk” characters when using Spring Kafka Consumer
[英]Spring cloud stream functional producer/consumer bean is not working when declared out side of @SpringBootApplication
如果 userProducer 被放置在单独的 class 中,它不会被触发,例如通过 StreamBridge。
package com.moments.auth;
import com.moments.auth.payload.UserEventPayload;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.stream.annotation.EnableBinding;
import org.springframework.context.annotation.Bean;
import java.util.function.Function;
import java.util.function.Supplier;
@SpringBootApplication
public class AuthApplication {
public static void main(String[] args) {
SpringApplication.run(AuthApplication.class, args);
}
@Bean
public Function<UserEventPayload, UserEventPayload> userProducer(){
return userEventPayload -> {
return userEventPayload;
};
}
}
YAML 文件
cloud:
stream:
function:
definition: userProducer
bindings:
userProducer-out-0:
destination: user
kafka.binder:
brokers: 127.0.0.1
defaultBrokerPort: 9092
单独放置 class
package com.moments.auth.messaging;
import com.moments.auth.payload.UserEventPayload;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.function.Function
@Component
@Slf4j
public class UserEventSender {
@Bean
public Function<UserEventPayload, UserEventPayload> userProducer(){
return userEventPayload -> {
return userEventPayload;
};
}
}
如果 userProducer 绑定在主 class 之外的位置需要工作,我应该怎么做?
Update-1 添加了 package 名称
您定义了一个Function
bean,这意味着您的应用程序现在是一个processor
( Source
的Supplier
和Sink
的Consumer
)。
Processor
将从输入绑定主题接收消息,处理它们并将其放入 output 绑定主题(在您的情况下为 userProducer-out-0.destination=user)
您需要定义一个input binding
,例如:
bindings:
userProducer-in-0:
destination: inputTopic
group: groupTest
userProducer-out-0:
destination: user
Your UserEventSender
class belongs to com.moments.auth.messaging
package which is a sub package of your main class com.moments.auth
. 现在可以了,将被@SpringBootApplication
中的@ComponentScan
扫描。
您的UserEventSender
使用@Component
而不是@Configuration
进行注释。
虽然@Configuration
也是一个@Component
(用于组件扫描目的),但@Component
不是@Configuration
,因为它意味着单个组件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.