Package io.fathom.cloud.mq.filesystem

Source Code of io.fathom.cloud.mq.filesystem.SftpMessageQueueWriter

package io.fathom.cloud.mq.filesystem;

import io.fathom.cloud.mq.MessageQueueWriter;
import io.fathom.cloud.sftp.RemoteFile;
import io.fathom.cloud.sftp.Sftp;
import io.fathom.cloud.ssh.SftpChannel;
import io.fathom.cloud.ssh.SshConfig;

import java.io.IOException;
import java.util.UUID;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class SftpMessageQueueWriter implements MessageQueueWriter {
    private static final Logger log = LoggerFactory.getLogger(SftpMessageQueueWriter.class);

    private final RemoteFile queueDir;

    private final SshConfig sshConfig;

    private final RemoteFile tmpDir;

    private Sftp buildSftp() throws IOException {
        SftpChannel sftp = sshConfig.getSftpChannel();
        return new Sftp(sftp, tmpDir);
    }

    public SftpMessageQueueWriter(SshConfig sshConfig, RemoteFile queueDir) throws IOException {
        this.sshConfig = sshConfig;
        this.queueDir = queueDir;

        this.tmpDir = new RemoteFile(queueDir, "_tmp");
        try (Sftp sftp = buildSftp()) {
            sftp.mkdirs(tmpDir.getSshPath());
        }
    }

    @Override
    public void enqueue(byte[] data) throws IOException {
        String name = System.currentTimeMillis() + "_" + UUID.randomUUID().toString();

        try (Sftp sftp = buildSftp()) {
            RemoteFile remoteFile = new RemoteFile(queueDir, name);

            sftp.writeAtomic(remoteFile, data);
        }
    }

}
TOP

Related Classes of io.fathom.cloud.mq.filesystem.SftpMessageQueueWriter

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.