1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/LiZhiW-fastdfs-java-client

Клонировать/Скачать
README.md 9.2 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 03.12.2024 02:16 594e688

fastdfs-java-client (Java-клиент для файлового сервера FastDFS)

Введение

Краткое описание FastDFS

FastDFS — это распределённая файловая система с открытым исходным кодом, разработанная на чистом языке C. FastDFS представляет собой легковесную распределённую файловую систему с открытым исходным кодом для управления файлами, которая включает функции: хранение файлов, синхронизация файлов, доступ к файлам (загрузка и скачивание файлов) и решает проблемы хранения больших объёмов данных и балансировки нагрузки. Особенно подходит для онлайн-сервисов, использующих файлы в качестве носителя, таких как фотохостинги и видеохостинги. Официальный форум http://bbs.chinaunix.net/forum-240-1.html

Поскольку предоставленный официальной командой код Java-клиента не реализует пул соединений (возникнут проблемы с производительностью при высоком параллелизме), а стиль кода, предоставленного официальной командой, похож на язык C, структура не очень хороша, и его трудно использовать в онлайн-проектах. Поэтому был написан собственный код на основе официального, а также вдохновением послужил проект [FastDFS_Client] на GitHub.

[FastDFS_Client] имеет недостаток, заключающийся в том, что он зависит от слишком большого количества фреймворков (зависит от SpringBoot, commons-io, commons-pool2, hibernate-validator, thumbnailator и т. д.), что не подходит ни для отдельного использования, ни для гибкого использования, поэтому была проведена переработка исходного кода проекта, после чего осталась только зависимость от commons-pool2.

Основные характеристики

  1. Требуется JDK версии 1.7 и выше.
  2. Поддерживается управление пулом подключений к серверу (реализовано через commons-pool2).
  3. Как загрузка, так и скачивание файлов поддерживают функцию возобновления передачи с прерванной точки, а также мониторинг состояния кластера FastDFS.
  4. Код имеет чёткую и понятную структуру, прост в использовании и подходит для вторичной разработки и настройки, может быть интегрирован со Spring.

Основные интерфейсы и дизайнерские идеи

Описание структуры пакетов

cfg           - конфигурационные параметры (не используются)
client        - упаковка StorageClient и TrackerClient
conn          - информация о соединениях с сервером
constant      - определение коммуникационных констант
exception     - определение исключений
mapper        - отображение запросов и ответов данных в model
model         - упаковка модели запроса и ответа
pool          - параметры пула соединений
protocol      - протокол запроса и ответа
    storage   - storage протокол запроса и ответа
    tracker   - tracker протокол запроса и ответа
utils         - определения классов инструментов

Обзор основных интерфейсов

Connection          - интерфейс подключения к серверу
ProtocolHead        - заголовок данных протокола запроса и ответа
BaseRequest         - интерфейс объекта запроса
BaseResponse        - интерфейс объекта ответа
BaseCommand         - интерфейс выполнения команд
AbstractCommand     - абстрактный класс выполнения команд
StorageCommand      - абстрактный класс команд storage
TrackerCommand      - абстрактный класс команд tracker
CommandExecutor     - интерфейс исполнителя команд (используется для выполнения команд)
DownloadCallback    - интерфейс обратного вызова загрузки файла
StorageClient       - клиент storage (упаковка различных операций с сервером Storage)
TrackerClient       - трекер-клиент (упаковка различных операций с трекером-сервером)

Пример использования

// 1. Создание фабрики соединений (пользователь создаёт новое соединение)
PooledConnectionFactory pooledConnectionFactory = new PooledConnectionFactory(500, 500);
// 2. Конфигурация пула соединений
GenericKeyedObjectPoolConfig conf = new GenericKeyedObjectPoolConfig();
conf.setMaxTotal(200);
conf.setMaxTotalPerKey(200);
conf.setMaxIdlePerKey(100);
// 3. Пул соединений
ConnectionPool connectionPool = new ConnectionPool(pooledConnectionFactory, conf);
Set<String> trackerSet = new HashSet<String>();
trackerSet.add("192.168.10.128:22122");
// 4. Исполнитель команд
DefaultCommandExecutor commandExecutor = new DefaultCommandExecutor(trackerSet, connectionPool);
// 5. Трекер-клиент
TrackerClient trackerClient = new DefaultTrackerClient(commandExecutor);
// 6. Клиент storage
StorageClient storageClient = new DefaultStorageClient(commandExecutor, trackerClient);

// 7. Получение информации о узле Storage сервера через трекер-клиент
StorageNode storageNode = trackerClient.getStorageNode("group1");

// 8. Получение информации о файле
StorageNodeInfo storageNodeInfo = trackerClient.getFetchStorage("group1", "M00/00/00/wKg4i1gxz_6AIPPsAAiCQSk77jI661.png");

// 9. Загрузка файла
File file = new File("F:\\123456.txt");
FileInputStream fileInputStream = FileUtils.openInputStream(file);
StorePath storePath = storageClient.uploadFile("group1", fileInputStream, file.length(), "txt");

// 10. Скачивание файла
DownloadFileWriter downloadFileWriter = new DownloadFileWriter("F:\\123.xlsx");
String filePath = storageClient.downloadFile("group1", "M00/00/00/wKgKgFg02TaAY3mTADCUhuWQdRc53.xlsx", downloadFileWriter);

// ... дополнительные операции

// 11. Закрытие пула соединений
connectionPool.close();

Интеграция с Spring

cleverframe-filemanager.properties файл конфигурации

# IP-адрес сервера Tracker
fileupload.FastDFS.trackers=192.168.10.128:22122,192.168.10.129:22122
# Настройка времени ожидания соединения
fileupload.FastDFS.soTimeout=10000
# Установка таймаута соединения
fileupload.FastDFS.connectTimeout=5000
# Максимальное количество соединений в пуле
fileupload.FastDFS.maxTotal=200
# Максимальное количество подключений на ключ в пуле
fileupload.FastDFS.maxTotalPerKey=200
# Максимальное количество незанятых подключений на ключ (влияет на производительность при параллельной работе)
fileupload.FastDFS.maxIdlePerKey=50

spring-context-filemanager.xml файл конфигурации

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-4.2.xsd"
       default-lazy-init="false">

    <!--Конфигурация пула FastDFS-->
    <bean id="fastDfsConnectionPool" class="org.cleverframe.fastdfs.pool.ConnectionPool" destroy-method="close">
        <constructor-arg index="0" type="org.apache.commons.pool2.KeyedPooledObjectFactory">
            <bean

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/LiZhiW-fastdfs-java-client.git
git@api.gitlife.ru:oschina-mirror/LiZhiW-fastdfs-java-client.git
oschina-mirror
LiZhiW-fastdfs-java-client
LiZhiW-fastdfs-java-client
master