Spring集成-@InboundChannelAdapter轮询

时间:2019-12-24 13:31:28

标签: spring-integration

我是Spring Integration的新手。我们正在使用Spring Integration Annotations创建应用程序。 我已经配置了@InboundChannelAdapter,轮询器的固定延迟为5秒。但是问题是,一旦我在weblogic上启动我的应用程序,适配器就会开始轮询并几乎没有消息到达端点。 我们需要调用rest服务,然后触发此适配器。 有没有办法实现相同的目的?

TIA!

1 个答案:

答案 0 :(得分:1)

autoStartup属性设置为false,然后使用控制总线启动/停止它。

@SpringBootApplication
@IntegrationComponentScan
public class So59469573Application {

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

}

@Component
class Integration {

    @Autowired
    private ApplicationContext context;

    @InboundChannelAdapter(channel = "channel", autoStartup = "false",
            poller = @Poller(fixedDelay = "5000"))
    public String foo() {
        return "foo";
    }

    @ServiceActivator(inputChannel = "channel")
    public void handle(String in) {
        System.out.println(in);
    }

    @ServiceActivator(inputChannel = "controlChannel")
    @Bean
    public ExpressionControlBusFactoryBean controlBus() {
        return new ExpressionControlBusFactoryBean();
    }

}

@MessagingGateway(defaultRequestChannel = "controlChannel")
interface Control {

    void send(String control);
}

@RestController
class Rest {

    @Autowired
    Control control;

    @PostMapping("/foo/{command}")
    public void trigger(@PathVariable String command) {
        if ("start".equals(command)) {
            control.send("@'integration.foo.inboundChannelAdapter'.start()");
        }
    }

}