AMQP становится широко принята в качестве протокола по выбору связи между IoT шлюзом и центром обработки данных. Если вы хотите быстро создать бэкэнд-сервис AMQP, который может быть немедленно готов для ваших шлюзов и устройств, быстрый старт Rhiot AMQP из проекта Rhiot будет для вас более чем интересным.
Быстрый запуск облачного хранилища AMQP можно использовать в качестве основы для микросервисов AMQP с толстой флягой (так называемых cloudlets ). Если вы хотите создать простое бэкэнд-приложение, способное отображать конечную точку AMQP и обрабатывать обмен данными на основе AMQP, быстрый запуск облачного сервиса AMQT — это лучший способ начать ваши усилия по разработке.
Создание и запуск облачного проекта AMQP
Чтобы создать облачный проект AMQP, выполните следующие команды:
git clone [email protected]:rhiot/quickstarts.git
cp -r quickstarts/cloudlets/amqp amqp
cd amqp
mvn install
Чтобы запустить облачный сервис AMQP, выполните следующую команду:
java -jar target/rhiot-cloudlets-amqp-1.0.0-SNAPSHOT.jar
Это действительно все, что вам нужно для предоставления брокеру сообщений AMQP внешним устройствам и шлюзам.
Вы также можете создать и запустить его как образ Docker (мы любим Docker и очень рекомендуем этот подход):
TARGET_IMAGE=yourUsername/rhiot-cloudlets-amqp
mvn install docker:build docker:push -Ddocker.image.target=${TARGET_IMAGE}
docker run -it ${TARGET_IMAGE}
AMQP Broker
По умолчанию AMQP облачко Quickstart начинает встроенный ActiveMQ AMQP брокера на 5672 порту. Если вы хотите подключить ваше облачное приложение к внешнему брокеру ActiveMQ (вместо запуска встроенного), запустите облачное хранилище с BROKER_URL
переменной среды или системным свойством, например:
java -DBROKER_URL=tcp://amqbroker.example.com:61616 -jar target/rhiot-cloudlets-amqp-1.0.0-SNAPSHOT.jar
…или…
docker run -e BROKER_URL=tcp://amqbroker.example.com:61616 -it yourUsername/rhiot-cloudlets-amqp
Пример приложения чата
Быстрый запуск облачного сервиса AMQP на самом деле является простым приложением чата. Клиенты могут отправлять сообщения в канал чата, подписавшись на брокера и отправив сообщения в chat
очередь AMQP.
$ amqp-client -h localhost -p 5672 --topic chat "Hello, this is the IoT device!"
Клиенты могут подписаться на обновления чата, прослушивая chat-updates
тему AMQP — всякий раз, когда новое сообщение отправляется на канал чата, клиенты, зарегистрированные на него chat-updates
, получают обновленную историю чата.
$ amqp-client -h localhost -p 5672 --subscribe --topic chat-updates
Hello, this is the IoT device!
I just wanted to say hello!
Hello, IoT device. Nice to meet you!
Быстрый запуск также предоставляет простой REST API, который можно использовать для чтения истории чата с помощью HTTP- GET
запроса:
$ curl http://localhost:8180/chat
Hello, this is the IoT device!
I just wanted to say hello!
Hello, IoT device. Nice to meet you!
Архитектурный Обзор
Когда облачный сервис AMQP запускается со встроенным брокером ActiveMQ, архитектура этого примера выглядит следующим образом:
Когда вы подключаетесь к внешнему брокеру ActiveMQ (используя BROKER_URL
опцию), архитектура примера становится больше похожа на следующую диаграмму:
Код быстрого запуска
Вам может быть интересно, сколько кода вам нужно, чтобы воспользоваться преимуществами представленной функциональности AMQP. Ниже приведен весь код, используемый нашим быстрым стартом для обработки подключения AMQP:
import io.rhiot.steroids.camel.CamelBootstrap;
import java.util.LinkedList;
import java.util.List;
import static io.rhiot.steroids.activemq.EmbeddedActiveMqBrokerBootInitializer.amqpJmsBridge;
import static org.apache.commons.lang3.StringUtils.join;
public class ChatCloudlet extends CamelBootstrap {
static final List chat = new LinkedList<>();
@Override
public void configure() throws Exception {
from(amqpJmsBridge("chat")).process(
exchange -> chat.add(exchange.getIn().getBody(String.class))
).process(
exchange -> exchange.getIn().setBody(join(chat, "\n"))
).to(amqpJmsBridge("topic:chat-updates"));
}
}
Ниже приведен код, используемый для запуска API REST, упомянутого ранее:
import io.rhiot.steroids.camel.Route;
import org.apache.camel.builder.RouteBuilder;
import static org.apache.commons.lang3.StringUtils.join;
@Route
public class ChatRestApiRoutes extends RouteBuilder {
@Override
public void configure() throws Exception {
restConfiguration().component("netty4-http").host("0.0.0.0").port(8180);
rest("/chat").get().route().process(
exchange -> exchange.getIn().setBody(join(ChatCloudlet.chat, "\n"))
);
}
}
Как видите, Apache Camel — первоклассный гражданин в мире Rhiot. Чтобы упростить подключение Camel, Rhiot поставляется со статическими методами DSL, такими как EmbeddedActiveMqBrokerBootInitializer.amqpJmsBridge, которые можно использовать для простого создания конечных точек Camel, связанных с брокером, используемым в быстром запуске.