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); } } }