是否有可能以编程方式创建/拆除Spring Integration通道,而不是在Spring配置中静态声明它们?
我的情况是这样的:
我有一个需要推送通知的webapp,所以我使用长轮询。那些长轮询调用需要在服务器上阻塞,直到他们得到一个事件。
我正在设想的(当然是开放的替代方案)是每个会话的Spring Integration队列通道,每个通道都会监听一个pubsub通道。因此,当服务器事件发生时,它将被发布到pubsub,然后将其传递到各个会话队列,在那里它们将被弹出并发送到轮询的客户端。
为了做到这一点,在创建会话时,我必须在pubsub通道上注册新的队列通道列表。当会话被销毁时,新队列也将被销毁。
这样的事情可能吗?
我不希望会话直接监听pubsub,因为存在丢失消息的风险,所以我希望在它们之间有一个队列来缓冲它们。
谢谢, 罗伊
答案 0 :(得分:4)
是的,您可以简单地实例化QueueChannel
并将其设为outputChannel
的{{1}}。然后创建一个BridgeHandler
,在构造函数中传递pubSub和bridge处理程序。
在消费者上调用EventDrivenConsumer
以使其订阅pubSub,并在会话结束时start()
取消订阅。
如果您不想手动连接这些组件,只需声明队列通道,并在一个小的应用程序上下文中桥接;使其成为主上下文的子项,它将自动订阅父上下文中的pubSub。请致电stop()
以断开连接。