Spring Integration - 以编程方式创建/拆除频道

时间:2013-11-21 16:35:52

标签: spring spring-integration

是否有可能以编程方式创建/拆除Spring Integration通道,而不是在Spring配置中静态声明它们?

我的情况是这样的:

我有一个需要推送通知的webapp,所以我使用长轮询。那些长轮询调用需要在服务器上阻塞,直到他们得到一个事件。

我正在设想的(当然是开放的替代方案)是每个会话的Spring Integration队列通道,每个通道都会监听一个pubsub通道。因此,当服务器事件发生时,它将被发布到pubsub,然后将其传递到各个会话队列,在那里它们将被弹出并发送到轮询的客户端。

为了做到这一点,在创建会话时,我必须在pubsub通道上注册新的队列通道列表。当会话被销毁时,新队列也将被销毁。

这样的事情可能吗?

我不希望会话直接监听pubsub,因为存在丢失消息的风险,所以我希望在它们之间有一个队列来缓冲它们。

谢谢, 罗伊

1 个答案:

答案 0 :(得分:4)

是的,您可以简单地实例化QueueChannel并将其设为outputChannel的{​​{1}}。然后创建一个BridgeHandler,在构造函数中传递pubSub和bridge处理程序。

在消费者上调用EventDrivenConsumer以使其订阅pubSub,并在会话结束时start()取消订阅。

如果您不想手动连接这些组件,只需声明队列通道,并在一个小的应用程序上下文中桥接;使其成为主上下文的子项,它将自动订阅父上下文中的pubSub。请致电stop()以断开连接。