调整@JmsListener

时间:2016-06-23 13:24:42

标签: spring jms spring-jms

@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

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

如果它是消息驱动的,我不知道它为什么这么慢???

1 个答案:

答案 0 :(得分:0)

是Spring默认情况下,JMSListener使用轮询。 见DefaultMessageListenerContainer 另请参阅default receiveTimeout即1s。

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

注意:此值必须小于事务管理器使用的事务超时(当然,在相应的单元中)。 0表示根本没有超时;但是,这只有在不在事务管理器中运行时才可行,并且通常不鼓励,因为这样的侦听器容器不能干净地关闭。负值(例如-1)表示无等待接收操作。