Spring Cloud Stream - 程序化发布

Spring Cloud Stream - programmatic publishing

我想知道是否可以调用流源而不是轮询。 我的来源将是这样的(行不通):

@SpringBootApplication
@RestController
@EnableBinding(Source.class)
public class ServiceApplication {
    private final Logger logger = LoggerFactory.getLogger(this.getClass());

    public static void main(String[] args) {
        SpringApplication.run(ServiceApplication.class, args);
    }

    @Autowired
    private PersonsRepository dao;

    @GetMapping("/send")
    public String sendMessage() {
        this.sendVoter("foo");
        return "VOTER SENT";
    }

    @SentTo(Source.OUTPUT)
    private Person sendVoter(String name) {
        logger.warn("Sending...");
        return dao.findByFirstname(name);
    }
}

为了让它开始,我必须编写代码:

@SpringBootApplication
@RestController
@EnableBinding(Source.class)
public class ServiceApplication {
...
    @GetMapping("/send")
    public String sendMessage() {
        this.sendVoter();
        return "VOTER SENT";
    }

    @InboundChannelAdapter(Source.OUTPUT)
    private Person sendVoter() {
        logger.warn("Sending...");
        return dao.findByFirstname("foo");
    }
}

但是来源马上就开始了。它不是以编程方式触发的。 我必须使用 ApplicationEventPublisher 还是仅用于 Spring Cloud Bus 应用程序?还有其他我想不到的提示吗? 感谢任何光

您可以直接注入通道或接口,并以类似的方式从您的控制器方法中调用它:http://docs.spring.io/spring-cloud-stream/docs/Brooklyn.SR2/reference/htmlsingle/#_injecting_the_bound_interfaces