spring - 使用 JmsListener 的 Spring JMS 消息传递 - 它如何扩展?
问题描述
我正在尝试以可扩展的方式将 Spring JMS 消息与 @JmsListener 一起使用,但我没有看到它发生。我有一个 ConnectionFactory bean,它返回一个通过 JMS 和数据库 DataSource 池连接到 Oracle Advanced Queue 的工厂。
当每个@JmsListener 接收器再次连接到JMS(并因此连接到数据库池)时,问题就开始了。我的理解是我可以有很多 @JmsListener 方法,每个服务一个,但是这样做我非常有限。
共享连接是开启的,但是由于每个@JmsListener 创建一个不同的DefaultMessageListenerContainer,每个都有一个数据库连接。
如果我还希望服务同时处理消息并设置container.setConcurrency("3-5")
,那么它会打开3 * numberOfListeners
连接。
如果我container.setCacheLevel(DefaultMessageListenerContainer.CACHE_NONE)
从每一秒开始使用 then 每个侦听器容器都会与 JMS/数据库连接和断开连接。
我想要将一次(或更多,如果有并发作业要处理)连接到 JMS/数据库的东西,而不是连接侦听器次数,也不是在每一秒为每个侦听器连接断开连接。
解决方案
您可以使用 aSingleConnectionFactory
来包装供应商工厂,并且所有容器都将使用相同的连接。
推荐阅读
- android - iOS设备ios麦克风的权限访问
- database - 如何在 oracle 数据库表中插入 csv 或 .txt 文件的日期列?
- java - 开放世界游戏状态保存安卓
- python - Python 多处理性能不佳
- apache-spark - 从 Spark DataFrame 中删除空白值并合并为单行
- python-3.x - 每次我创建一个新的 virtualenv - 我都必须更新 Pip
- android - 将 compilesdkversion 更新为 27 后未调用 Recyclerview 适配器方法
- sql - 在 SQL 中解析 JSON 嵌套数组
- ruby - 使用 Cairo 的 Ruby Gtk3 内存泄漏
- javascript - AJAX 循环结束后执行代码