Spring Cloud Stream - 程序化发布

时间:2017-02-09 13:57:11

标签: spring-cloud-stream

我想知道是否可以调用流源而不是轮询。 我的来源就是这样(赢得了工作):

@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应用程序?我无法想到的任何其他提示? 感谢任何光明

1 个答案:

答案 0 :(得分:1)

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