zoukankan      html  css  js  c++  java
  • ActiveMQ 的连接和会话

    要了解 connection 和 session 的概念,可以先从 ConnectionState 和 SessionState 入手:

    // 省略部分代码
    public class ConnectionState {
        ConnectionInfo info;
        private final ConcurrentHashMap<TransactionId, TransactionState> transactions = new ConcurrentHashMap<TransactionId, TransactionState>();
        private final ConcurrentHashMap<SessionId, SessionState> sessions = new ConcurrentHashMap<SessionId, SessionState>();
        private final List<DestinationInfo> tempDestinations = Collections.synchronizedList(new ArrayList<DestinationInfo>());
        private final AtomicBoolean shutdown = new AtomicBoolean(false);
        private boolean connectionInterruptProcessingComplete = true;
        private HashMap<ConsumerId, ConsumerInfo> recoveringPullConsumers;
    
        public ConnectionState(ConnectionInfo info) {
            this.info = info;
            // Add the default session id.
            addSession(new SessionInfo(info, -1));
        }
    }

    从代码可以看出,连接里有事务集合、会话集合、临时队列集合等,这说明:
    1. 事务属于一个连接; 2. 会话属于一个连接; 3. 临时队列的生存期是连接的有效期

    // 省略部分代码
    public class SessionState {
        final SessionInfo info;
    
        private final Map<ProducerId, ProducerState> producers = new ConcurrentHashMap<ProducerId, ProducerState>();
        private final Map<ConsumerId, ConsumerState> consumers = new ConcurrentHashMap<ConsumerId, ConsumerState>();
        private final AtomicBoolean shutdown = new AtomicBoolean(false);
    
        public SessionState(SessionInfo info) {
            this.info = info;
        }
    }

    从上面能看出,producer 和 consumer 是属于某个会话的,producer 和 consumer 都有唯一的 ID 。

    // 省略部分代码
    public class ProducerState {
        final ProducerInfo info;
        private TransactionState transactionState;
    }
    
    public class ConsumerState {        
        final ConsumerInfo info;
    }

    ProducerState 和 ConsumerState 只是做了简单的封装。

    其中 ConnectionInfo, SessionInfo, ProducerInfo, ConsumerInfo 都是消息类型,均继承自 BaseCommand 接口。

  • 相关阅读:
    算法思想杂谈【原创】
    OpenGL坐标变换专题
    XSS的原理分析与解剖:第三章(技巧篇)【转】
    php实现字符串翻转
    (基础) --- php session原理和多台服务器session共享问题
    (基础) --- php get和post的区别
    (基础)--- PHP单引号和双引号区别
    MySQL主从复制原理解析
    详解MYSQL各种优化原理
    mysql索引详解
  • 原文地址:https://www.cnblogs.com/allenwas3/p/8934336.html
Copyright © 2011-2022 走看看