2019-04-05 12:19:25 +02:00
|
|
|
package eu.dnetlib.message;
|
|
|
|
|
|
|
|
import com.rabbitmq.client.Channel;
|
|
|
|
import com.rabbitmq.client.Connection;
|
|
|
|
import com.rabbitmq.client.ConnectionFactory;
|
|
|
|
import sun.rmi.runtime.Log;
|
|
|
|
|
2019-04-11 15:39:29 +02:00
|
|
|
import java.io.IOException;
|
2019-04-05 12:19:25 +02:00
|
|
|
import java.util.HashMap;
|
|
|
|
import java.util.Map;
|
|
|
|
import java.util.concurrent.LinkedBlockingQueue;
|
2019-04-11 15:39:29 +02:00
|
|
|
import java.util.concurrent.TimeoutException;
|
2019-04-05 12:19:25 +02:00
|
|
|
|
|
|
|
public class MessageManager {
|
|
|
|
|
|
|
|
private final String messageHost;
|
|
|
|
|
|
|
|
private final String username;
|
|
|
|
|
|
|
|
private final String password;
|
|
|
|
|
|
|
|
|
|
|
|
private boolean durable;
|
|
|
|
|
|
|
|
private boolean autodelete;
|
|
|
|
|
|
|
|
final private LinkedBlockingQueue<Message> queueMessages;
|
|
|
|
|
|
|
|
public MessageManager(String messageHost, String username, String password, final LinkedBlockingQueue<Message> queueMessages) {
|
|
|
|
this.queueMessages = queueMessages;
|
|
|
|
this.messageHost = messageHost;
|
|
|
|
this.username = username;
|
|
|
|
this.password = password;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public MessageManager(String messageHost, String username, String password, boolean durable, boolean autodelete, final LinkedBlockingQueue<Message> queueMessages) {
|
|
|
|
this.queueMessages = queueMessages;
|
|
|
|
this.messageHost = messageHost;
|
|
|
|
this.username = username;
|
|
|
|
this.password = password;
|
|
|
|
|
|
|
|
this.durable = durable;
|
|
|
|
this.autodelete = autodelete;
|
|
|
|
}
|
2019-04-11 15:39:29 +02:00
|
|
|
|
|
|
|
private Connection createConnection() throws IOException, TimeoutException {
|
2019-04-05 12:19:25 +02:00
|
|
|
ConnectionFactory factory = new ConnectionFactory();
|
|
|
|
factory.setHost(this.messageHost);
|
|
|
|
factory.setUsername(this.username);
|
|
|
|
factory.setPassword(this.password);
|
2019-04-11 15:39:29 +02:00
|
|
|
return factory.newConnection();
|
|
|
|
}
|
|
|
|
|
|
|
|
private Channel createChannel(final Connection connection, final String queueName, final boolean durable, final boolean autodelete ) throws Exception {
|
|
|
|
Map<String, Object> args = new HashMap<>();
|
2019-04-05 12:19:25 +02:00
|
|
|
args.put("x-message-ttl", 10000);
|
|
|
|
Channel channel = connection.createChannel();
|
|
|
|
channel.queueDeclare(queueName, durable, false, this.autodelete, args);
|
|
|
|
return channel;
|
|
|
|
}
|
|
|
|
public boolean sendMessage(final Message message, String queueName) throws Exception {
|
2019-04-11 15:39:29 +02:00
|
|
|
try (Connection connection = createConnection(); Channel channel = createChannel(connection, queueName, this.durable, this.autodelete)) {
|
2019-04-05 12:19:25 +02:00
|
|
|
|
|
|
|
channel.basicPublish("", queueName,null, message.toString().getBytes());
|
|
|
|
return true;
|
|
|
|
} catch (Throwable e) {
|
2019-04-11 15:39:29 +02:00
|
|
|
throw new RuntimeException(e);
|
2019-04-05 12:19:25 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public boolean sendMessage(final Message message, String queueName, boolean durable_var, boolean autodelete_var) throws Exception {
|
2019-04-11 15:39:29 +02:00
|
|
|
try (Connection connection = createConnection(); Channel channel = createChannel(connection, queueName, durable_var, autodelete_var)) {
|
2019-04-05 12:19:25 +02:00
|
|
|
|
|
|
|
channel.basicPublish("", queueName,null, message.toString().getBytes());
|
|
|
|
return true;
|
|
|
|
} catch (Throwable e) {
|
2019-04-11 15:39:29 +02:00
|
|
|
throw new RuntimeException(e);
|
2019-04-05 12:19:25 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public void startConsumingMessage(final String queueName, final boolean durable, final boolean autodelete) throws Exception{
|
2019-04-11 15:39:29 +02:00
|
|
|
|
|
|
|
Channel channel = createChannel(createConnection(), queueName, durable, autodelete);
|
2019-04-05 12:19:25 +02:00
|
|
|
channel.basicConsume(queueName, false, new MessageConsumer(channel,queueMessages));
|
|
|
|
}
|
|
|
|
}
|