Для начала установим и настроим 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. Работать с ним можно, но придется немного подработать напильником для удобного пользования.