消息监听容器配置
要配置SimpleMessageListenerContainer容器的事务,服务还有其他的一些交互,有很多的选项。下表中列出了容器属性的名称,以及使用命名空间<rabbit:message-listener-container/>中配置时的属性名称(在括号内)。在命名空间中,有些属性不存在,使用N/A标识。
属性 | 描述 |
channelTransacted (channel-transacted) | 布尔型,用来描述是否在消息中使用事务 |
acknowledgeMode(acknowledge) | NONE意味着没有任何的应答会被发送。RabbitMQ调用autoack,因为消息代理假定消费者不会针对应答采取任何操作。MANUAL以为着监听者必须通过调用Channel.basicAck()来告知所有的消息。AUTO意味着容器会自动应答,除非MessageListener抛出异常。注意如果设置了channelTransacted ,那么消息代理不仅要求应答还要求提交通知。这是默认方式。 |
transactionManager(transaction-manager) | 监听器进行操作的外部事务管理器。如果channelTransacted 设置了,Channel处在事务中,那么它的事务和外部事务进行了同步。 |
prefetchCount(prefetch) | 在一个套接字框架内,从代理接收消息的数目。这个值越大,发送消息就越快,但是导致非顺序处理的风险就越高。如果acknowledgeMode属性设置为NONE,这个属性将被忽略。为了匹配txSize,这个值有可能被增加。 |
shutdownTimeout(N/A) | 当容器被关闭的时候,它允许当时消息再被处理的时间。这个值的默认值是5秒。如果时间到了,Channel中的非事务消息将被丢弃。 |
txSize(transaction-size) | 当acknowledgeMode被设置为AUTO时,容器将处理txSize数目消息才开始应答。当事务Channel提交时,也是这种情况。prefetchCount的数目如果小于txSize,那么要增加它的数目。 |
receiveTimeout(receive-timeout) | 等待每一个消息的时间。如果acknowledgeMode属性设置为NONE,这个receiveTimeout属性将没有作用,容器只是不断的获取消息。如果是事务中的channel,并且txSize>1,它的作用很大,它将导致已经消费的消息直到过期时间才被应答。 |
autoStartup(auto-startup) | 指示容器是否随着ApplicationContext的启动而启动。设置这个值为false,如果在你启动的时候消息代理还没有启动,当消息代理准备好的时候调用start()方法手动启动。 |
phase(phase) | 当autoStartup被设置为true的时候,就有了生命周期长度,容器的启动和关闭在这个生命周期长度内。这个值越小,那么容器启动的时间越小,关闭的时间越池。它的默认值是Integer.MAX_VALUE,意味着容器尽量迟的启动,尽量早的关闭。 |
adviceChain(advice-chain) | 对监听执行进行一系列AOP增强。它可以被用来实施一些比较尖端的问题,例如当代理死掉的时候,进行原子化拒绝。注意,AMQP错误引发的重链由CachingConnectionFactory来完成,只要这个代理还在。 |
taskExecutor(task-executor) | Spring TaskExecutor的引用来执行监听调用。默认情况是SimpleAsyncTaskExecutor,使用内部线程管理。 |
errorHandler(error-handler) | 一个错误处理策略的引用,来处理在监听器执行过程中的没有捕获到的异常。默认值是ConditionalRejectingErrorHandler。 |
concurrentConsumers(concurrency) | 在初始化监听器的时候,并发消费者的数目。 |
maxConcurrentConsumers(max-concurrency) | 并发消费者的最大数目。必须大于或者等于并发消费者的数目。 |
startConsumerMinInterval(min-start-interval) | 新消费者按需启动时,所需要的延时时间。 |
stopConsumerMinInterval(min-stop-interval) | 消费者停止所需要的延时时间。 |
consecutiveActiveTrigger(min-consecutive-active) | 在没有接收超时的情况发生,消费者连续接收到消息的数目,为创建新的消费者作参考。它受到txSize的影响。 |
consecutiveIdleTrigger(min-consecutive-idle) | 消费者必须经过的接收超时的数目,在停止消费者之前。它受到txSize的影响。 |
connectionFactory(connection-factory) | connectionFactory引用,当使用命名空间配置时,默认值是:rabbitConnectionFactory。 |
defaultRequeueRejected(requeue-rejected) | 决定由于监听器抛出异常而拒绝的消息是否被重新放回队列。默认值为true。 |
recoveryInterval(recovery-interval) | 由于非致命错误而导致消费者启动失败,到下次启动时的时间间隔。 |
exclusive(exclusive) | 决定一个消费者对于队列是否拥有专属访问。如果这个值设置为true,容器的并发数目就必须是1。如果另外一个消费者进行了排他性访问,那么容器将试着恢复消费者,根据恢复时间间隔。当使用命名空间进行配置时,这个值配置在<rabbit:listener/>中。默认值为false。 |
rabbitAdmin(admin) | 当一个容器监听至少一个自动删除的队列时,在启动的时候发现丢失,容器将会使用RabbitAdmin声明队列,绑定和交换。如果在配置时使用的是条件声明,容器必须使用配置的admin来声明这些元素。只有自动删除的,并且是条件声明的队列需要admin。如果你希望在容器启动之前不希望自动删除的队列被删除,其可以设置admin的auto-startup属性为false。默认情况下RabbitAdmin声明的是分条件元素。 |