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

使用JmsListener的Spring JMS消息传递-它是如何伸缩的?

濮阳立果
2023-03-14

我试图以一种可伸缩的方式将Spring JMS消息与@JMSListener一起使用,但我没有看到它发生。我有一个ConnectionFactory bean,它返回通过JMS和数据库数据源池连接到Oracle高级队列的工厂

当每个@JMSListener接收器再次连接到JMS(从而连接到数据库池)时,问题就开始了。我的理解是,我可以有许多@JMSListener方法,每个服务一个,但这样做我是非常有限的。

共享连接被打开,但由于每个@JMSListener创建了不同的DefaultMessageListenerContainer,因此每个@JMSListener都有一个数据库连接。

如果我还希望服务并发处理消息并设置container.setconcurrency(“3-5”),那么它将打开3*NumberOfListeners连接。

如果我使用container.setCacheLevel(DefaultMessageListenerContainer.cache_none),那么每个侦听器容器每隔一秒钟就连接和断开JMS/数据库。

我想要连接一次(或者多次,如果有并发作业要处理的话)到JMS/数据库的东西,而不是连接监听器计数时间,也不是每秒为每个监听器连接-断开连接。

共有1个答案

孟成文
2023-03-14

您可以使用singleConnectionFactory来包装供应商工厂,并且所有容器都将使用相同的连接。

 类似资料:
  • 我使用的是spring引导版本1.3.2。我正在使用@JMSListener从activemq获取我使用JMSTemplate创建/生成的消息。代码如下: 现在当从smtp出现连接失败错误时,我想暂停@JMSListener一段时间,然后重新开始使用消息。对于这个用例,我还没有看到使用@JMSListener的更好的例子。由于我使用的是spring boot,我在应用程序属性中添加了activem

  • 我通过SpringJMS在我的项目中使用MQ,作为代理我使用ActiveMQ。我需要基于消息设置过期,所以我尝试使用,但没有成功。所有到达ActiveMQ的消息都具有expiration=0。 有人成功地使用Spring为每个消息设置过期吗?

  • 我计划使用DynamoDB,它的数据需要同步到CloudSearch。我知道可以使用Lambda,但我想使用运动学。所以生产者将是DynamoDB,它将为表中的每个PUT/DELETE生成流的数据。 我的设计非常直接:(假设消费者有序地接收记录) 接收记录 当存在多个分片时,我无法弄清楚KCL如何确保在消费者端有序交付记录。从API留档中,我了解到 我们需要使用GetShardIterator创建

  • 由于内容脚本在网页而不是扩展程序的上下文中运行,因此它们通常需要某种与扩展程序其余部分进行通信的方式。例如,RSS 阅读器扩展程序可以使用内容脚本来检测页面上 RSS 摘要的存在,然后通知后台页面以显示该页面的操作图标。 扩展及其内容脚本之间的通信使用消息传递来实现。任何一方都可以监听从另一端发送的消息,并在同一通道上进行响应。消息可以包含任何有效的 JSON 对象(空,布尔值,数字,字符串,数组

  • ms tcp nodelay 描述: 在信差的 TCP 会话上禁用 nagle 算法。 类型: Boolean 是否必需: No 默认值: true ms initial backoff 描述: 出错时重连的初始等待时间。 类型: Double 是否必需: No 默认值: .2 ms max backoff 描述: 出错重连时等待的最大时间。 类型: Double 是否必需: No 默认值: 15

  • 消息传递 目录 一次简单的请求 h3Name 长时间保持连接 h3Name 扩展之间的消息传递 h3Name 安全策略 h3Name 范例 h3Name API reference Properties propertyName Methods methodName Events eventName Types id For information on how to use experiment