I installed the RabbitMQ Portable:
https://github.com/isindicic/RabbitMqPortable
or from:
https://www.rabbitmq.com/install-windows-manual.html
You'll need to install ErLang or copy it to RabbitMQ directory.
Configure the environment variable: ERLANG_HOME
You can use on Windows: set ERLANG_HOME=<<erlang_directory>>
or
On Linux: export ERLANG_HOME=<<erlang_directory>>
configure erl config in:
$ERLANG_HOME\bin\erl.ini
and
$ERLANG_HOME\erts-10.3\\bin\erl.ini
configure using:
[erlang]
Bindir=G:\\erl10.3\\erts-10.3\\bin
Progname=erl
Rootdir=G:\\erl10.3\\erts-10.3
copy $ERLANG_HOME\erts-10.3\bin
to $ERLANG_HOME\bin
configure the environment variable for RabbitMQ:
RABBITMQ_HOME=<<location>>
Enter in the rabbitmq_server folder and execute:
rabbitmq-server
On the same folder type:
rabbitmqctl list_queues
We'll write two programs in PHP.
One that sends a single message (Send.php). And another that receives messages and prints them out. (Receive.php)
Send.php:
<?php
require_once __DIR__ . '/vendor/autoload.php';
use PhpAmqpLib\Connection\AMQPStreamConnection;
use PhpAmqpLib\Message\AMQPMessage;
$connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');
$channel = $connection->channel();
$channel->queue_declare('hello', false, false, false, false);
$msg = new AMQPMessage('Hello World!');
$channel->basic_publish($msg, '', 'hello');
echo " [x] Sent 'Hello World!'\n";
$channel->close();
$connection->close();
?>
Receive.php:
<?php
require_once __DIR__ . '/vendor/autoload.php';
use PhpAmqpLib\Connection\AMQPStreamConnection;
$connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');
$channel = $connection->channel();
$channel->queue_declare('hello', false, false, false, false);
echo ' [*] Waiting for messages. To exit press CTRL+C', "\n";
$callback = function($msg) {
echo " [x] Received ", $msg->body, "\n";
};
$channel->basic_consume('hello', '', false, true, false, false, $callback);
while(count($channel->callbacks)) {
$channel->wait();
}
$channel->close();
$connection->close();
?>
call receive.php:
php receive.php
call send.php:
php send.php
on sbin folder, type:
rabbitmq-plugins enable rabbitmq_management
navigate to:
http://server-name:15672/
default login: guest/guest
and to view the api:
http://server-name:15672/api/
To view existing Queues
Click on “Queues” to view existing queues or create new queues
To add New Queue
Click on “Add a new queue” link to create a new queue and provide details
link: https://www.journaldev.com/11655/spring-rabbitmq
Resumo sobre RabbitMQ:
O RabbitMQ é um message broker leve, confiável, escalável e portátil.
Mas, ao contrário de muitos message brokers, ele não é um provedor JMS nativo.
Mas inclui um plugin que suporta JMS e seus modelos Queue e Topic.
Seus clientes comunicam com ele por meio de um protocolo neutro de plataforma: o AMQP (Advanced Message Queuing Protocol).
Existem diversas bibliotecas cliente AMQP que exportam uma interface JMS.
Mas o AMQP é suficientemente diferente na operação do JMS, o que pode causar dores de cabeça para desenvolvedores Java que são acostumados ao modelo JMS.
Publish / Subscribe
O JMS tem o conceito de filas de tópicos que garantem que as mensagens de um editor sejam enviadas para todos os assinantes. Você pode facilmente obter o mesmo comportamento no AMQP vinculando várias filas a uma exchange.
link: https://spring.io/blog/2010/06/14/understanding-amqp-the-protocol-used-by-rabbitmq/
O RabbitMQ é um broker AMQP que tem o protocolo AMQP 0-9-1 nativo, enquanto o ActiveMQ suporta por padrão o JMS.
O RabbitMQ foi construído pensando no AMQP (protocolo) e AMQP 0-9-1 (API).
O ActiveMQ foi construído sobre o Java OpenWire (protocolo) e com suporte a JMS (API).
Os conceitos usados no AMQP 0-9-1, são diferentes dos usados no JMS.
Uma das principais diferenças é que, no AMQP 0-9-1, um produtor envia para um MOM sem conhecer a estratégia real de distribuição de mensagens, enquanto no JMS o produtor envia para uma fila ou um tópico (estando ciente do tipo de roteamento de mensagens em vigor).
Então é difícil dizer o que é melhor ou pior, já que a semântica é muito diferente entre o JMS e o AMQP 0-9-1.
As filas e trocas (exchanges) do RabbitMQ são configuradas através do protocolo AMQP, de modo que uma biblioteca cliente permite que você configure todos os seus destinos e seus comportamentos.
O ActiveMQ requer uma configuração de destino específica porque a especificação do JMS não abrange nenhum aspecto da administração.
Além disso, a configuração do sistema do RabbitMQ é com Erlang, enquanto o ActiveMQ é geralmente configurado em XML.
Dois aplicativos Java diferentes que usam o JMS podem estar usando MOMs diferentes e, portanto, ainda não podem se comunicar, pois os protocolos utilizados por eles podem ser diferentes (por exemplo, OpenWire x Stomp).
O ActiveMQ é um sistema MOM com uma biblioteca JMS que permite que os programas Java o acessem usando o JMS, mas não pode necessariamente se comunicar com outro programa Java JMS usando, digamos, o WebLogic.
Diferentes sistemas AMQP MOM podem interoperar entre si (supondo que estejam usando a mesma versão do AMQP), pois o AMQP é um padrão nas mesmas linhas que, digamos, SMTP.
links: https://stackoverflow.com/questions/7044157/switching-from-activemq-to-rabbitmq
https://spring.io/projects/spring-amqp
http://activemq.apache.org/amqp.html