【问题标题】:Tuning @JmsListener调整@JmsListener
【发布时间】:2016-06-23 13:24:42
【问题描述】:

@JmsListener 是在底层使用轮询器,还是消息驱动的?使用 concurrency=1 进行测试时,似乎每秒读取一条消息:

2016-06-23 09:09:46.117  INFO 13044 --- [enerContainer-1] c.s.s.core.service.PolicyChangedHandler  : Received: 1: This is a test
2016-06-23 09:09:46.922  INFO 13044 --- [enerContainer-1] c.s.s.core.service.PolicyChangedHandler  : Received: 2: This is a test
2016-06-23 09:09:47.730  INFO 13044 --- [enerContainer-1] c.s.s.core.service.PolicyChangedHandler  : Received: 3: This is a test
2016-06-23 09:09:48.535  INFO 13044 --- [enerContainer-1] c.s.s.core.service.PolicyChangedHandler  : Received: 4: This is a test
2016-06-23 09:09:49.338  INFO 13044 --- [enerContainer-1] c.s.s.core.service.PolicyChangedHandler  : Received: 5: This is a test
2016-06-23 09:09:50.155  INFO 13044 --- [enerContainer-1] c.s.s.core.service.PolicyChangedHandler  : Received: 6: This is a test

如果是轮询,如何调整轮询率或增加每次轮询读取的消息数?

如果是消息驱动的,我不明白为什么这么慢???

【问题讨论】:

    标签: spring jms spring-jms


    【解决方案1】:

    是的,Spring JMSListener 默认使用后台轮询。 见DefaultMessageListenerContainer 另请参阅default receiveTimeout,即 1s。

    可以通过“receiveTimeout”属性配置每次尝试的接收超时时间。 setReceiveTimeout 设置用于接收呼叫的超时时间,以毫秒为单位。默认为 1000 毫秒,即 1 秒。

    注意:这个值需要小于事务管理器使用的事务超时时间(当然,在适当的单位)。 0 表示完全没有超时;但是,这仅在不在事务管理器中运行时才可行,并且通常不鼓励这样做,因为这样的侦听器容器无法完全关闭。 -1 等负值表示无等待接收操作。

    【讨论】:

      猜你喜欢
      • 2017-05-13
      • 1970-01-01
      • 2022-01-04
      • 2014-11-12
      • 2017-05-05
      • 1970-01-01
      • 2016-07-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多