首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

ActiveMq spring 高级配备 属性详解 持续更新中

2013-08-01 
ActiveMq spring 高级配置 属性详解持续更新中1 .concurrentConsumers,maxConcurrentConsumers初始化默认

ActiveMq spring 高级配置 属性详解 持续更新中
1 .concurrentConsumers,maxConcurrentConsumers
      初始化默认值:
        concurrentConsumers = 1;
        maxConcurrentConsumers = 1;
SimpleMessageListenerContainer允许创建多个Session和MessageConsumer来接收消息。具体的个数由 concurrentConsumers属性指定。需要注意的是,应该只是在Destination为Queue的时候才使用多个 MessageConsumer(Queue中的一个消息只能被一个Consumer接收),虽然使用多个MessageConsumer会提高消息处理 的性能,但是消息处理的顺序却得不到保证:消息被接收的顺序仍然是消息发送时的顺序,但是由于消息可能会被并发处理,因此消息处理的顺序可能和消息发送的 顺序不同。此外,不应该在Destination为Topic的时候使用多个MessageConsumer,这是因为多个 MessageConsumer会接收到同样的消息。

    SimpleMessageListenerContainer创建的Session和MessageConsumer分别保存在sessions和consumers属性中。

2.taskExecutor属性的默认值是null,也就是说,对MessageListener(或者 SessionAwareMessageListener)的回调是在MessageConsumer的内部线程中执行。如果指定了 taskExecutor,那么回调是在TaskExecutor内部的线程中执行。以下是相关的代码:
Java代码
1. protected MessageConsumer createListenerConsumer(final Session session)
2. throws JMSException {
3. Destination destination = getDestination();
4. if (destination == null) {
5. destination = resolveDestinationName(session, getDestinationName());
6. }
7. MessageConsumer consumer = createConsumer(session, destination);
8.
9. if (this.taskExecutor != null) {
10. consumer.setMessageListener(new MessageListener() {
11. public void onMessage(final Message message) {
12. taskExecutor.execute(new Runnable() {
13. public void run() {
14. processMessage(message, session);
15. }
16. });
17. }
18. });
19. }
20. else {
21. consumer.setMessageListener(new MessageListener() {
22. public void onMessage(Message message) {
23. processMessage(message, session);
24. }
25. });
26. }
27.
28. return consumer;
29. }

热点排行