繁体   English   中英

Spring 云 stream 功能性生产者/消费者 bean 在 @SpringBootApplication 之外声明时不起作用

[英]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,这意味着您的应用程序现在是一个processorSourceSupplierSinkConsumer )。

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM