Spring AMQP消息监听容器配置

时间:2022-10-25 20:02:15

消息监听容器配置

    要配置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声明的是分条件元素。