Apache ActiveMQ имеет структуру данных, называемую BitArrayBin. Это используется, чтобы узнать, дублировано ли сообщение. Идентификатор сообщения представляет собой комбинацию идентификатора производителя и идентификатора последовательности.
У каждого производителя будет BitArrayBin для отслеживания его идентификаторов последовательности. Как только он находит BitArrayBin для данного производителя, он устанавливает идентификатор последовательности, который является длинным значением для BitArrayBin.
oldValue = bitArrayBin.setBit(sequenceId, true)
if (oldVlaue) {
"message is duplicated"
}
Метод возвращает старое значение.
Если у - длинный индекс, он используется для получения индекса бина и смещения в нем.
y = bin index * 64 + offset
BitArrayBin - это не что иное, как держатель для многих лотков, размер которых можно определить во время его построения. Каждый бин содержит длинную переменную для хранения битов, поэтому он может хранить до 64 логических значений.
Битовая маскировка используется для установки бита, а затем для получения его значения.
Этот класс не имеет много документации. Вам нужно пройти через его исходный код, чтобы узнать внутренности.