Skip to content

Instantly share code, notes, and snippets.

@danilobatistaqueiroz
Last active May 27, 2019 02:45
Show Gist options
  • Save danilobatistaqueiroz/70336e60ca7bd52d398b97d8c52a6a59 to your computer and use it in GitHub Desktop.
Save danilobatistaqueiroz/70336e60ca7bd52d398b97d8c52a6a59 to your computer and use it in GitHub Desktop.
RabbitMQ tutorial

Working With RabbitMQ Server

Downloading RabbitMQ Portable

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>>

Starting the RabbitMQ server

Enter in the rabbitmq_server folder and execute:

rabbitmq-server

server

Listing queues

On the same folder type:

rabbitmqctl list_queues

listing queues

Making a "hello world" message exchange

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();
?>

Executing the programs

call receive.php:

php receive.php

receive

call send.php:

php send.php

send

Activating Administrator Console

on sbin folder, type:
rabbitmq-plugins enable rabbitmq_management

navigate to:
http://server-name:15672/

default login: guest/guest

console_login

and to view the api:
http://server-name:15672/api/

Rabbit MQ Server home page:
rabbitmq_server

To view existing Queues
Click on “Queues” to view existing queues or create new queues
queues

To add New Queue
Click on “Add a new queue” link to create a new queue and provide details
new_queue

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment