当前位置: 首页 > 知识库问答 >
问题:

Spring集成-以编程方式创建/拆除通道

海翼
2023-03-14

与在Spring config中静态地声明它们相反,是否有可能以编程方式创建/拆除Spring集成通道?

我的情况是这样的:

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

我所设想的(当然,对替代方案持开放态度)是每个会话的Spring Integration队列通道,每个会话都收听单个pubsub通道。因此,当服务器事件发生时,它将被发布到 pubsub,然后 pubsub 将通过管道向下传输到各个会话队列,在那里它们将被弹出并发送到正在轮询的客户端

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

这样的事情可能吗?

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

谢谢,罗伊

共有1个答案

贺彬
2023-03-14

是的,您可以简单地实例化一个< code>QueueChannel并使其成为< code>BridgeHandler的< code>outputChannel。然后创建一个< code>EventDrivenConsumer,在构造函数中传递pubSub和桥处理程序。

调用使用者的 start() 以使其订阅 pubSub,并在会话关闭时调用 stop() 以取消订阅。

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

 类似资料:
  • 问题内容: 我需要在我的应用程序中动态创建任务。我怎样才能做到这一点?我可以获取带有注释的调度程序,但是调度程序需要对象。我需要提供Spring对象,以便我的任务也可以使用注释。 问题答案: 您只需要将目标对象包装在中,然后提交:

  • 我一直在使用Spring boot,并且在我的项目中删除了所有文件。不幸的是,它还使用了Spring集成,根据我的经验,Spring集成非常基于。 我有一个场景,要求我有一个聚合器,并让聚合器每隔秒轮询一次。 这可以像这样使用XML来完成(从以前的SO问题中获得的示例): 我已经找到了一个类,这个类有点像是在玩把戏,它的bean定义是: 但是,只有在与此处理程序关联的中接收到新消息时,才触发的方法

  • 问题内容: 我一直在尝试以编程方式重做我的应用程序上的工作。(不使用情节提要) 除了手动制作导航控制器外,我几乎完成了。 我一直在做一些研究,但找不到任何手动实现此方法的文档。(我开始将应用程序制作为单视图应用程序) 目前,我只有1个ViewController。当然是appDelegate 导航控制器将在应用程序的所有页面中使用。 如果有人可以帮助我,或发送指向一些适当文档的链接以编程方式进行此

  • 是否可以像使用WordPress用户一样通过编程方式创建客户。显然,WooCommerce用户共享一些相同的WordPress用户字段,还有其他内容需要设置,如账单/邮政地址。 以前有人做到过吗?我在他们网站上的WooCommerce API/函数列表中找不到任何内容。 编辑:刚刚找到这个:http://docs.woothemes.com/wc-apidocs/function-wc_creat

  • 问题内容: 我知道我可以使用Java中的 api 以编程方式创建文件,如下所示: 但是是否有任何 API 可以构建树?(例如Dom之类的api) 我需要这样的东西: 和: 提前致谢。 问题答案: 由于XSLT也是XML,因此您可以简单地使用相同的策略: 等等… 但这不是很优雅。您应该改用库或框架,但应该很容易找到一个谷歌浏览器。

  • 我有一个WS,它返回非常基本的产品数据:代码、价格和图像。我需要用这些基本数据以编程方式创建Hybris产品,然后进行同步,以便在店面上看到这些产品。 创建具有这些基本信息的产品的步骤是什么?有OOTB服务吗?