Temos uma infraestrutura de IoT com dispositivos se comunicando por MQTT. No entanto, agora também temos a exigência de que esses dispositivos enviem os dados do sensor para uma fila de processamento em nuvem que os avalia e armazena.
Como o MQTT não oferece suporte a um modelo puxado, atualmente estou procurando possíveis serviços de enfileiramento para usar. ActiveMQ Artemis chamou minha atenção por causa dos vários protocolos que suporta, entre outras coisas, MQTT e uma interface REST.
O que não consigo ver claramente na documentação, no entanto, é se o Artemis pode servir apenas como um único intermediário para várias filas de mensagens ou se pode realmente ser usado para converter entre eles. O plano até agora era ter um cliente MQTT inscrito no tópico "processamento" que coletaria todas as mensagens publicadas nele e as colocaria em uma fila de votação, onde os trabalhadores viriam para coletá-las. Parece que existe a possibilidade de Artemis fazer isso sem serviços adicionais em execução, mas não tenho certeza se estou interpretando a documentação corretamente.
Então, para fazer uma pergunta direta: posso configurar o Artemis para que eu possa publicar mensagens MQTT nele e depois pesquisá-las em uma fila, usando, por exemplo, a interface REST?
Em geral, os intermediários de mensagens são usados para integração de aplicativos. Dessa forma, geralmente você pode enviar mensagens com um protocolo e consumi-las com outro. Este é o caso do ActiveMQ Artemis. Certamente você pode publicar uma mensagem usando MQTT e depois consumi-la usando a interface REST.
Dito isso, eu recomendaria usar o protocolo STOMP em vez da interface REST. O protocolo STOMP é padronizado, enquanto a interface REST é exclusiva do ActiveMQ Artemis. O STOMP é muito simples e pode ser usado na maioria (se não em todos) dos locais onde um cliente de mensagens REST seria usado. Muitos corretores implementam o STOMP, portanto, se você precisar migrar para um corretor diferente, o trabalho será substancialmente mais fácil.