Для начала установим и настроим RabbitMQ.
Тут все просто, скачиваем с основного сайта Erlang, проставляем ERLANG_HOME. Далее качаем и ставим сам RabbitMQ. Запускаем Rabbit через командную строку:
Теперь надо настроить пользователя и виртуальный хост сервера. Запускаем с командной строки:
Все, сервер настроен на работу. Более тонкие настройки можно найти на RabbitMQ
Теперь напишем простенькие Sender и Consumer.
Sender:
Consumer:
ps. Не могу не упомянуть что для RabbitMQ есть аппендер log4j. Работать с ним можно, но придется немного подработать напильником для удобного пользования.
Тут все просто, скачиваем с основного сайта Erlang, проставляем ERLANG_HOME. Далее качаем и ставим сам RabbitMQ. Запускаем Rabbit через командную строку:
%RABBITMQ_SERVER%/sbin/rabbitmq-server.batЕсли появилось сообщение broking running то все ок, наш сервер работает.
Теперь надо настроить пользователя и виртуальный хост сервера. Запускаем с командной строки:
%RABBITMQ_SERVER%/sbin/rabbitmqctl.bat add_user admin adminПользователь admin с паролем admin создан. Теперь создадим виртуальный хост:
rabbitmqctl.bat add_vhost ru.vie2004.vhostпосле чего надо дать права на пользование им нашим пользователем:
rabbitmqctl.bat set_permissions -p ru.vie2004.vhost admin .* .* .*
Все, сервер настроен на работу. Более тонкие настройки можно найти на RabbitMQ
Теперь напишем простенькие Sender и Consumer.
Sender:
ConnectionFactory factory = new ConnectionFactory();
factory.setUsername("admin");
factory.setPassword("admin");
factory.setVirtualHost("ru.vie2004.vhost");
factory.setHost("localhost");
factory.setPort(5672);
Connection conn = factory.newConnection();
Channel channel = conn.createChannel();
String exchangeName = "myNewExchange";
String routingKey = "myNewRoute";
byte[] messageBodyBytes = "Наше сообщение".getBytes();
channel.basicPublish(exchangeName, routingKey, MessageProperties.PERSISTENT_TEXT_PLAIN, messageBodyBytes);
Если надо передать не текст, а обьект, то необходимо сериализовать его в byte[].Consumer:
ConnectionFactory factory = new ConnectionFactory();
factory.setUsername("admin");
factory.setPassword("admin");
factory.setVirtualHost("ru.vie2004.vhost");
factory.setHost("localhost");
factory.setPort(5672);
Connection conn = factory.newConnection();
Channel channel = conn.createChannel();
boolean durable = true;
channel.exchangeDeclare("myNewExchange", "direct", durable);
channel.queueDeclare("myNewQueue", durable, false, false, null);
channel.queueBind("myNewQueue", "myNewExchange", "myNewRoute");
boolean noAck = false;
QueueingConsumer consumer = new QueueingConsumer(channel);
channel.basicConsume(queueName, noAck, consumer);
while (true) {
QueueingConsumer.Delivery delivery;
try {
delivery = consumer.nextDelivery();
} catch (InterruptedException ie) {
continue;
}
System.out.println("Получено сообщение: " + new String(delivery.getBody()));
}
Все, запускаем слушателя с отправителем и читаем сообщение.ps. Не могу не упомянуть что для RabbitMQ есть аппендер log4j. Работать с ним можно, но придется немного подработать напильником для удобного пользования.