{"id":5113,"date":"2021-02-15T18:35:19","date_gmt":"2021-02-15T17:35:19","guid":{"rendered":"https:\/\/www.dontesta.it\/?p=5113"},"modified":"2022-03-13T12:39:25","modified_gmt":"2022-03-13T11:39:25","slug":"activemq-artemis-easy-docker-creation-also-for-arm","status":"publish","type":"post","link":"https:\/\/www.dontesta.it\/en\/2021\/02\/15\/activemq-artemis-easy-docker-creation-also-for-arm\/","title":{"rendered":"ActiveMQ Artemis: Easy Docker Creation also for ARM"},"content":{"rendered":"<p>For some time I have been carrying out projects that revolve around the <a href=\"https:\/\/en.wikipedia.org\/wiki\/Internet_of_things\" target=\"_blank\" rel=\"noopener\"><strong>IoT <\/strong>(Internet Of Things)<\/a> ecosystem using <a href=\"https:\/\/en.wikipedia.org\/wiki\/Single-board_computer\" target=\"_blank\" rel=\"noopener\"><strong>SBC<\/strong> (Single Board Computers)<\/a> such as the <a href=\"https:\/\/www.raspberrypi.org\/\" target=\"_blank\" rel=\"noopener\"><strong>Raspberry Pi<\/strong><\/a>. Within the IoT ecosystem, the <a href=\"https:\/\/en.wikipedia.org\/wiki\/Message_broker#:~:text=A%20message%20broker%20is%20an,exchange%20messages%2C%20effectively%20implementing%20decoupling.\" target=\"_blank\" rel=\"noopener\"><strong>Message Broker<\/strong><\/a> is one of those components, I would say fundamental, which enable communications between the \"pieces of iron\".<\/p>\n<p>The <a href=\"https:\/\/mqtt.org\/\" target=\"_blank\" rel=\"noopener\"><strong>MQTT<\/strong><\/a> protocol is in fact the king of <strong>machine-to-machine (M2M)<\/strong> connectivity, which has become increasingly popular with the evolution and popularization of IoT concepts. The MQTT protocol can be thought of as a lightweight and simplified analog of <a href=\"https:\/\/en.wikipedia.org\/wiki\/Advanced_Message_Queuing_Protocol\" target=\"_blank\" rel=\"noopener\"><strong>AMQP<\/strong><\/a>, also based on the <a href=\"https:\/\/en.wikipedia.org\/wiki\/Publish%E2%80%93subscribe_pattern\" target=\"_blank\" rel=\"noopener\"><strong>publish\/subscribe<\/strong><\/a> model, but it provides a much smaller network footprint and can be used by small devices with limited computing capacity.<\/p>\n<p>There are many Open Source and Paid MQTT Message Brokers available for use, such as:<\/p>\n<ul>\n<li><a href=\"https:\/\/mosquitto.org\/\" target=\"_blank\" rel=\"noopener\">Mosquitto<\/a><\/li>\n<li><a href=\"https:\/\/www.hivemq.com\/\" target=\"_blank\" rel=\"noopener\">HiveMQ<\/a><\/li>\n<li><a href=\"https:\/\/activemq.apache.org\/\" target=\"_blank\" rel=\"noopener\">Apache ActiveMQ<\/a><\/li>\n<li><a href=\"https:\/\/www.rabbitmq.com\/\" target=\"_blank\" rel=\"noopener\">RabbitMQ<\/a><\/li>\n<li><a href=\"https:\/\/www.erlang-solutions.com\/capabilities\/emqx\/\" target=\"_blank\" rel=\"noopener\">Erlang MQTT<\/a> (EMQ)<\/li>\n<\/ul>\n<p><strong>Apache ActiveMQ<\/strong> is one of the most popular Open Source, multi-protocol, Java-based Message Broker. It supports industry standard protocols so users get the benefits of client choices across a wide range of languages \u200b\u200band platforms. There are currently two \"versions\" of ActiveMQ: the \"classic\" 5.x broker and the \"next generation\" Artemis broker for <a href=\"https:\/\/en.wikipedia.org\/wiki\/Event-driven_messaging\" target=\"_blank\" rel=\"noopener\"><strong>event-driven messaging applications<\/strong><\/a>. When Artemis reaches a sufficient level of parity of functionality with code base 5.x, it will become ActiveMQ 6.<\/p>\n<p>In my projects I usually use RabbitMQ (but also <a href=\"https:\/\/www.dontesta.it\/2019\/08\/04\/raspberry-pi-sense-hat-come-pubblicare-dati-cloudamqp-mqtt\/\">CloudAMQP<\/a>) and Apache ActiveMQ. I recently started experimenting with Apache ActiveMQ Artemis installed as Message Broker on Raspberry Pi.<\/p>\n<p>In this article I want to show you how to build your own Apache ActiveMQ Artemis Docker image for <a href=\"https:\/\/en.wikipedia.org\/wiki\/ARM_architecture\" target=\"_blank\" rel=\"noopener\"><strong>ARM<\/strong><\/a> platforms and consequently run on Raspberry Pi.<\/p>\n<p>&nbsp;<\/p>\n<h2>1. Where to start?<\/h2>\n<p>We start by going to the home page of the <a href=\"https:\/\/activemq.apache.org\/components\/artemis\/\" target=\"_blank\" rel=\"noopener\">ActiveMQ Artemis<\/a> project, and then from here, we immediately point to the <strong>Easy Docker Creation<\/strong> section.<\/p>\n<p>ActiveMQ Artemis provides some simple scripts to start working with Docker. To make it possible to generate your Docker images also for ARM platforms, about two weeks ago I had the opportunity to make a contribution to the ActiveMQ Artemis project, extending the <a href=\"https:\/\/github.com\/apache\/activemq-artemis\/tree\/master\/artemis-docker\" target=\"_blank\" rel=\"noopener\">artemis-docker<\/a> module.<\/p>\n<p>Before going further, let's see what the requirements are:<\/p>\n<ol>\n<li>git is optional. In case you can download the project in <a href=\"https:\/\/github.com\/apache\/activemq-artemis\/archive\/master.zip\" target=\"_blank\" rel=\"noopener\">zip<\/a> format from GitHub;<\/li>\n<li>JDK 8 or 11. It is recommended to create your own Docker SNAPSHOT images using JDK 11 for the build of the sources, since the artemis-docker module allows you to create Docker images for ARM starting from the <a href=\"https:\/\/adoptopenjdk.net\/\" target=\"_blank\" rel=\"noopener\">AdoptOpenJDK 11<\/a> image;<\/li>\n<li>Maven 3.x is optional. In case you can use the Maven wrapper (mvnw) included within the project;<\/li>\n<li>Docker 19.x\/20.x;<\/li>\n<li><a href=\"https:\/\/docs.docker.com\/buildx\/working-with-buildx\/\" target=\"_blank\" rel=\"noopener\">Docker Buildx<\/a>. For Docker versions from 19.03, buildx is included, it is not necessary to install it separately;<\/li>\n<li>Repository on Docker Hub where to host the Docker images that we are going to create. It is then necessary to facilitate the installation of the Docker image created on your Raspberry Pi.<\/li>\n<\/ol>\n<p>So let's start by running the clone of the ActiveMQ Artemis project. For our purpose we can also clone the project's Git repository without taking all the history with us: <code>git clone --depth 1 https:\/\/github.com\/apache\/activemq-artemis.git<\/code><\/p>\n<p>&nbsp;<\/p>\n<h2>2. Let's create our Docker image<\/h2>\n<p>Thanks to the <a href=\"https:\/\/github.com\/apache\/activemq-artemis\/tree\/master\/artemis-docker\" target=\"_blank\" rel=\"noopener\">artemis-docker<\/a> module, we have a number of options to get different Docker images:<\/p>\n<ol>\n<li>create the Docker image for the official release of ActiveMQ Artemis;<\/li>\n<li>create the Docker image for local distribution, that is, for the SNAPSHOT version obtained from the source build;<\/li>\n<li>create the Docker image based on CentOS and Debian images with Java 8;<\/li>\n<li>build the Ubuntu based Docker image with Java 11 in the AdoptOpenJDK implementation;<\/li>\n<li>create the Docker image for ARM (ARMv7 \/ ARM64).<\/li>\n<\/ol>\n<p>The <a href=\"https:\/\/github.com\/apache\/activemq-artemis\/blob\/master\/artemis-docker\/readme.md\" target=\"_blank\" rel=\"noopener\" class=\"broken_link\">readme.md<\/a> of the artemis-docker module clearly describes how to pursue the options listed above. We will focus on how to create the Docker image for ARM, both for the official release of ActiveMQ Artemis and for the SNAPSHOT version, the latter useful in order to test the new features before the release of the official version.<\/p>\n<p>The creation of the Docker image for ARM for the SNAPSHOT version involves the following steps. The current version of SNAPSHOT (at the time of this article's publication) is 2.18.0.<\/p>\n<ol>\n<li>Clone of the Artemis ActiveMQ repository.<\/li>\n<li>Build the project to get the SNAPSHOT distribution.<\/li>\n<li>Preparing Docker files for local deployment.<\/li>\n<li>Docker image build for ARM and push to Docker Hub repository.<\/li>\n<\/ol>\n<p>The build time of the project is variable depending on the computing power of your machine, for example, on my Mac Book Pro (Mid-2017) i7-7660U with 16GByte of RAM it is about 5 minutes (without running of unit tests). The Docker image build operation spends the most time in push and pull operations, and this depends on the connectivity you have available to the internet.<\/p>\n<p>In case you don't have good network connectivity, you might run into errors like this:<\/p>\n<ol>\n<li>failed to compute cache key: failed commit on ref \"layer-sha256:f60421c1f\": failed size validation: 2292149 != 24043427: failed precondition<\/li>\n<li>net\/http: TLS handshake timeout<\/li>\n<li>failed to copy: unexpected status: 504 Gateway Time-out<\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<p>The commands necessary to satisfy the four steps described above are indicated below.<\/p>\n<p>&nbsp;<\/p>\n<pre class=\"theme:solarized-dark lang:sh decode:true\" title=\"Console 1 - Creazione dell'immagine Docker per ARM della versione SNAPSHOT\"># 1. Clone the repository\r\n$ git clone --depth 1 https:\/\/github.com\/apache\/activemq-artemis.git\r\n\r\n# 2. Build of the project\r\n$ cd activemq-artemis\r\n\r\n# If you want skip the test use the -DskipTests argument\r\n$ mvn clean install\r\n\r\n# 3. Prepare the Docker file\r\n$ cd artemis-docker\r\n$ .\/prepare-docker.sh --from-local-dist --local-dist-path ..\/artemis-distribution\/target\/apache-artemis-2.18.0-SNAPSHOT-bin\/apache-artemis-2.18.0-SNAPSHOT\r\n\r\n# 4. Build the Docker image for ARM. You should replace the {your-username} and {your-repository-name} placeholders with your values\r\n$ cd ..\/artemis-distribution\/target\/apache-artemis-2.18.0-SNAPSHOT-bin\/apache-artemis-2.18.0-SNAPSHOT\r\n$ docker buildx build --platform linux\/arm64,linux\/arm\/v7 --push -t {your-username}\/{your-repository-name}:2.18.0-SNAPSHOT -f .\/docker\/Dockerfile-adoptopenjdk-11 .<\/pre>\n<p>&nbsp;<\/p>\n<p>If the execution of the <strong>prepare-docker.sh<\/strong> script (step 3) is successful, you should see on the screen when shown in the following figure, that is, the scripts (Docker files and scripts for running the container) that have been created within the docker directory which in turn is located within the ActiveMQ Artemis distribution directory, you will also find useful information to continue with the build of the Docker image.<\/p>\n<p>&nbsp;<\/p>\n<div id=\"attachment_5146\" style=\"width: 1034px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_prepare_docker_local_distribution.png\"><img aria-describedby=\"caption-attachment-5146\" decoding=\"async\" loading=\"lazy\" class=\"wp-image-5146 size-large\" title=\"Figure 1 - Docker image build preparation script output\" src=\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_prepare_docker_local_distribution-1024x534.png\" alt=\"Figure 1 - Docker image build preparation script output\" width=\"1024\" height=\"534\" srcset=\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_prepare_docker_local_distribution-1024x534.png 1024w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_prepare_docker_local_distribution-300x157.png 300w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_prepare_docker_local_distribution-768x401.png 768w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_prepare_docker_local_distribution-1536x802.png 1536w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_prepare_docker_local_distribution.png 1619w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><p id=\"caption-attachment-5146\" class=\"wp-caption-text\">Figure 1 - Docker image build preparation script output<\/p><\/div>\n<p>&nbsp;<\/p>\n<p>For the Docker image build command (step 4), you should replace the <strong>{your-username}\/{your-repository-name}<\/strong> placeholders with your values. In my case this translates to <strong>amusarra\/apache-artemis<\/strong>.<\/p>\n<p>&nbsp;<\/p>\n<div id=\"attachment_5130\" style=\"width: 1034px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_buildx_release_snapshot.png\"><img aria-describedby=\"caption-attachment-5130\" decoding=\"async\" loading=\"lazy\" class=\"wp-image-5130 size-large\" title=\"Figure 2 - Execution of the buildx command to generate the Docker image for ARM\" src=\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_buildx_release_snapshot-1024x355.png\" alt=\"Figure 2 - Execution of the buildx command to generate the Docker image for ARM\" width=\"1024\" height=\"355\" srcset=\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_buildx_release_snapshot-1024x355.png 1024w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_buildx_release_snapshot-300x104.png 300w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_buildx_release_snapshot-768x266.png 768w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_buildx_release_snapshot-1536x533.png 1536w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_buildx_release_snapshot-2048x710.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><p id=\"caption-attachment-5130\" class=\"wp-caption-text\">Figure 2 - Execution of the buildx command to generate the Docker image for ARM<\/p><\/div>\n<p>&nbsp;<\/p>\n<p>After performing step 4, you should see the image of ActiveMQ Artemis version 2.18.0-SNAPSHOT on your Docker Hub repository. The figure below shows in particular the contents of my amusarra\/apache-artemis repository.<\/p>\n<p>&nbsp;<\/p>\n<div id=\"attachment_5148\" style=\"width: 1034px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_repository_docker_hub.png\"><img aria-describedby=\"caption-attachment-5148\" decoding=\"async\" loading=\"lazy\" class=\"wp-image-5148 size-large\" title=\"Figure 3 - The content of the Docker Hub repository amusarra\/apache-artemis after build and push\" src=\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_repository_docker_hub-1024x717.png\" alt=\"Figure 3 - The content of the Docker Hub repository amusarra\/apache-artemis after build and push\" width=\"1024\" height=\"717\" srcset=\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_repository_docker_hub-1024x717.png 1024w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_repository_docker_hub-300x210.png 300w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_repository_docker_hub-768x538.png 768w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_repository_docker_hub.png 1291w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><p id=\"caption-attachment-5148\" class=\"wp-caption-text\">Figure 3 - The content of the Docker Hub repository amusarra\/apache-artemis after build and push<\/p><\/div>\n<p>&nbsp;<\/p>\n<p>If we wanted to prepare the Docker image of ActiveMQ Artemis version 2.16.0 (the current release version) instead, the steps are reduced to two:<\/p>\n<ol>\n<li>preparation of Docker files for the release version (in this case 2.16.0);<\/li>\n<li>build Docker image for ARM and push to your Docker Hub repository.<\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<pre class=\"theme:solarized-dark lang:sh decode:true\" title=\"Console 2 - Creazione dell'immagine Docker per ARM della versione 2.16.0\"># 1. Prepare the Docker file\r\n$ cd artemis-docker\r\n$ .\/prepare-docker.sh --from-release --artemis-version 2.16.0\r\n# 2. Build the Docker image for ARM\r\n$ cd _TMP_\/artemis\/2.16.0\r\n$ docker buildx build --platform linux\/arm64,linux\/arm\/v7 --push -t {your-username}\/{your-repository-name}:2.16.0 -f .\/docker\/Dockerfile-adoptopenjdk-11 .<\/pre>\n<p>&nbsp;<\/p>\n<p>The figure below shows the output of the prepare-docker.sh script which, unlike the first run, downloads the version 2.16.0 of ActiveMQ Artemis and then shows the scripts (Docker files and scripts for running the container) that are created within the docker directory (which in turn is contained within the _TMP_ \/artemis\/2.16.0\/ docker directory), also shows useful information to continue with the build of the Docker image.<\/p>\n<p>&nbsp;<\/p>\n<div id=\"attachment_5147\" style=\"width: 1034px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_prepare_docker_release.png\"><img aria-describedby=\"caption-attachment-5147\" decoding=\"async\" loading=\"lazy\" class=\"wp-image-5147 size-large\" title=\"Figure 4 - Docker image build preparation script output\" src=\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_prepare_docker_release-1024x580.png\" alt=\"Figure 4 - Docker image build preparation script output\" width=\"1024\" height=\"580\" srcset=\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_prepare_docker_release-1024x580.png 1024w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_prepare_docker_release-300x170.png 300w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_prepare_docker_release-768x435.png 768w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_prepare_docker_release-1536x870.png 1536w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_prepare_docker_release.png 1614w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><p id=\"caption-attachment-5147\" class=\"wp-caption-text\">Figure 4 - Docker image build preparation script output<\/p><\/div>\n<p>&nbsp;<\/p>\n<p>At this point you should have ActiveMQ Artemis version 2.16.0 and 2.18.0-SNAPSHOT on your Docker Hub repository.<\/p>\n<p>&nbsp;<\/p>\n<div id=\"attachment_5132\" style=\"width: 1034px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_buildx_release.png\"><img aria-describedby=\"caption-attachment-5132\" decoding=\"async\" loading=\"lazy\" class=\"wp-image-5132 size-large\" title=\"Figure 5 - Execution of the buildx command to generate the Docker image for ARM\" src=\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_buildx_release-1024x348.png\" alt=\"Figure 5 - Execution of the buildx command to generate the Docker image for ARM\" width=\"1024\" height=\"348\" srcset=\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_buildx_release-1024x348.png 1024w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_buildx_release-300x102.png 300w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_buildx_release-768x261.png 768w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_buildx_release-1536x522.png 1536w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_buildx_release-2048x696.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><p id=\"caption-attachment-5132\" class=\"wp-caption-text\">Figure 5 - Execution of the buildx command to generate the Docker image for ARM<\/p><\/div>\n<p>&nbsp;<\/p>\n<h2>3. Raspberry Pi: Pull e Run<\/h2>\n<p><strong>Finally here we are!<\/strong> Are you ready to pull the image from our Docker repository and then get a container running an instance of ActiveMQ Artemis?<\/p>\n<p>Before proceeding we have to fulfill a requirement: <strong>Docker 19.x \/ 20.x must be correctly installed on the Raspberry Pi<\/strong>. Regarding the Raspberry Pi model, I recommend version 4 and the model with at least 4GByte of RAM memory. In my case I have a Raspberry Pi 4 with 8GByte of RAM, Ubuntu 20.04.02 LTS operating system and Docker 20.10.3.<\/p>\n<p>&nbsp;<\/p>\n<div id=\"attachment_5150\" style=\"width: 816px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_rpi_system_info_by_neofetch.png\"><img aria-describedby=\"caption-attachment-5150\" decoding=\"async\" loading=\"lazy\" class=\"wp-image-5150 size-full\" title=\"Figure 6 - Raspberry Pi 4 system information by neofetch\" src=\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_rpi_system_info_by_neofetch.png\" alt=\"Figure 6 - Raspberry Pi 4 system information by neofetch\" width=\"806\" height=\"514\" srcset=\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_rpi_system_info_by_neofetch.png 806w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_rpi_system_info_by_neofetch-300x191.png 300w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_rpi_system_info_by_neofetch-768x490.png 768w\" sizes=\"auto, (max-width: 806px) 100vw, 806px\" \/><\/a><p id=\"caption-attachment-5150\" class=\"wp-caption-text\">Figure 6 - Raspberry Pi 4 system information by neofetch<\/p><\/div>\n<p>&nbsp;<\/p>\n<p>Once the requirements are met, it is possible to pull and run the Artemis ActiveMQ container using the following commands. We pull both versions of Docker images, even if we're going to use version 2.16.0 later.<\/p>\n<p>&nbsp;<\/p>\n<pre class=\"theme:solarized-dark lang:sh decode:true\" title=\"Console 2 - Creazione dell'immagine Docker per ARM della versione 2.16.0\"># 1. Pull the Docker Images of the ActiveMQ Artemis (2.16.0 and 2.18.0-SNAPSHOT)\r\n$ docker pull amusarra\/apache-artemis:2.18.0-SNAPSHOT\r\n$ docker pull amusarra\/apache-artemis:2.16.0\r\n# 2. Run the ActiveMQ Artemis 2.16.0\r\n$ docker run --rm -d --name activemq-artemis-2160 -p 61616:61616 -p 8161:8161 -p 1883:1883 amusarra\/apache-artemis:2.16.0\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p>In the container execution command, we specify which TCP \/ IP ports should be exported to the outside, in this case: console (8161), MQTT (1883) and Multi-Protocol [CORE, MQTT, AMQP, STOMP, HORNETQ, OPENWIRE] (61616).<\/p>\n<p>The figure below shows the logs of the Artemis ActiveMQ container just started successfully. The other figures show access to the Artemis ActiveMQ administration panel, whose login credentials (by default) are artemis\/artemis.<\/p>\n<p>&nbsp;<\/p>\n<div id=\"attachment_5133\" style=\"width: 1034px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_docker_container_logs.png\"><img aria-describedby=\"caption-attachment-5133\" decoding=\"async\" loading=\"lazy\" class=\"wp-image-5133 size-large\" title=\"Figure 7 - View the logs of the ActiveMQ Artemis Docker container\" src=\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_docker_container_logs-1024x451.png\" alt=\"Figure 7 - View the logs of the ActiveMQ Artemis Docker container\" width=\"1024\" height=\"451\" srcset=\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_docker_container_logs-1024x451.png 1024w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_docker_container_logs-300x132.png 300w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_docker_container_logs-768x339.png 768w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_docker_container_logs-1536x677.png 1536w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_docker_container_logs-2048x903.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><p id=\"caption-attachment-5133\" class=\"wp-caption-text\">Figure 7 - View the logs of the ActiveMQ Artemis Docker container<\/p><\/div>\n<p>&nbsp;<\/p>\n<div id=\"attachment_5141\" style=\"width: 1034px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_management_console_loging.png\"><img aria-describedby=\"caption-attachment-5141\" decoding=\"async\" loading=\"lazy\" class=\"wp-image-5141 size-large\" title=\"Figure 8 - Login page of the ActiveMQ Artemis Management Console\" src=\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_management_console_loging-1024x637.png\" alt=\"Figure 8 - Login page of the ActiveMQ Artemis Management Console\" width=\"1024\" height=\"637\" srcset=\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_management_console_loging-1024x637.png 1024w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_management_console_loging-300x187.png 300w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_management_console_loging-768x478.png 768w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_management_console_loging.png 1406w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><p id=\"caption-attachment-5141\" class=\"wp-caption-text\">Figure 8 - Login page of the ActiveMQ Artemis Management Console<\/p><\/div>\n<p>&nbsp;<\/p>\n<div id=\"attachment_5142\" style=\"width: 1034px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_management_console_system_info.png\"><img aria-describedby=\"caption-attachment-5142\" decoding=\"async\" loading=\"lazy\" class=\"wp-image-5142 size-large\" title=\"Figure 9 - ActiveMQ Artemis view current status\" src=\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_management_console_system_info-1024x659.png\" alt=\"Figure 9 - ActiveMQ Artemis view current status\" width=\"1024\" height=\"659\" srcset=\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_management_console_system_info-1024x659.png 1024w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_management_console_system_info-300x193.png 300w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_management_console_system_info-768x494.png 768w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_management_console_system_info.png 1355w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><p id=\"caption-attachment-5142\" class=\"wp-caption-text\">Figure 9 - ActiveMQ Artemis view current status<\/p><\/div>\n<p>&nbsp;<\/p>\n<h2>4. A very fast but effective test<\/h2>\n<p>Now that we have set up our Message Broker based on Artemis ActiveMQ on the Raspberry Pi, let's try to do a simple test which consists of:<\/p>\n<ol>\n<li>create a <strong>topic<\/strong> where a <strong>producer<\/strong> will send a message (in JSON format) containing the CPU temperature;<\/li>\n<li>create a producer that reads the CPU temperature every 5 seconds and sends the value read on the previously created topic;<\/li>\n<li>subscribe to the topic to read the published values.<\/li>\n<\/ol>\n<p>We will call the topic with the name <strong>RPI4.cpu-temp<\/strong> that we will create using the first command to follow. The next command is instead the one responsible for reading the CPU temperature every 5 seconds and publishing in the message on the newly created topic. Both commands make use of the <a href=\"https:\/\/github.com\/apache\/activemq-artemis\/blob\/master\/docs\/user-manual\/en\/using-server.md\" target=\"_blank\" rel=\"noopener\" class=\"broken_link\"><strong>artemis<\/strong><\/a> binary which is part of the server management tools.<\/p>\n<p>&nbsp;<\/p>\n<pre class=\"theme:solarized-dark lang:sh decode:true\" title=\"Console 2 - Creazione dell'immagine Docker per ARM della versione 2.16.0\"># 1. Create the topic RPI4.cpu-temp\r\n$ docker exec -it activemq-artemis-2160 \\\r\n\/bin\/bash .\/bin\/artemis queue create --user artemis --password artemis \\\r\n--address RPI4 --anycast --durable --purge-on-no-consumers \\\r\n--auto-create-address --name cpu-temp\r\n\r\n# 2. Send CPU Temperature on the topic RPI4.cpu-temp\r\n$ while true; \\\r\ndo docker exec -it activemq-artemis-2160 \\\r\n\/bin\/bash .\/bin\/.\/artemis producer --clientID rpi4 --destination topic:\/\/RPI4.cpu-temp --message \"$(echo -n '{\"cpu-temperature\":'; cat \/sys\/class\/thermal\/thermal_zone*\/temp | sed -e 's\/\\(.\\)..$\/.\\1\/'; echo -n '}')\" --message-count 1 --user artemis --password artemis; \\\r\nsleep 5; \\\r\ndone\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p>The figure below shows the post message command on the RPI4.cpu-temp topic in action. By accessing the Management Console, it is possible to see some detailed information regarding the number of sessions, the number of connections and see which are the current consumers of the topic.<\/p>\n<p>&nbsp;<\/p>\n<div id=\"attachment_5137\" style=\"width: 1034px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_execute_command_producer_message_of_cpu_temperature.png\"><img aria-describedby=\"caption-attachment-5137\" decoding=\"async\" loading=\"lazy\" class=\"wp-image-5137 size-large\" title=\"Figure 10 - Produce message to topic RPI4.cpu-temp\" src=\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_execute_command_producer_message_of_cpu_temperature-1024x222.png\" alt=\"Figure 10 - Produce message to topic RPI4.cpu-temp\" width=\"1024\" height=\"222\" srcset=\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_execute_command_producer_message_of_cpu_temperature-1024x222.png 1024w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_execute_command_producer_message_of_cpu_temperature-300x65.png 300w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_execute_command_producer_message_of_cpu_temperature-768x166.png 768w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_execute_command_producer_message_of_cpu_temperature-1536x332.png 1536w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_execute_command_producer_message_of_cpu_temperature-2048x443.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><p id=\"caption-attachment-5137\" class=\"wp-caption-text\">Figure 10 - Produce message to topic RPI4.cpu-temp<\/p><\/div>\n<p>&nbsp;<\/p>\n<div id=\"attachment_5140\" style=\"width: 1034px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_management_console_browser_sessions.png\"><img aria-describedby=\"caption-attachment-5140\" decoding=\"async\" loading=\"lazy\" class=\"wp-image-5140 size-large\" title=\"Figure 11 - Browse the Session on the ActiveMQ Artemis\" src=\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_management_console_browser_sessions-1024x269.png\" alt=\"Figure 11 - Browse the Session on the ActiveMQ Artemis\" width=\"1024\" height=\"269\" srcset=\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_management_console_browser_sessions-1024x269.png 1024w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_management_console_browser_sessions-300x79.png 300w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_management_console_browser_sessions-768x202.png 768w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_management_console_browser_sessions-1536x404.png 1536w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_management_console_browser_sessions.png 1577w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><p id=\"caption-attachment-5140\" class=\"wp-caption-text\">Figure 11 - Browse the Session on the ActiveMQ Artemis<\/p><\/div>\n<p>&nbsp;<\/p>\n<div id=\"attachment_5139\" style=\"width: 1034px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_management_console_browser_consumer.png\"><img aria-describedby=\"caption-attachment-5139\" decoding=\"async\" loading=\"lazy\" class=\"wp-image-5139 size-large\" title=\"Figure 12 - Browse the Consumer on the ActiveMQ Artemis\" src=\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_management_console_browser_consumer-1024x528.png\" alt=\"Figure 12 - Browse the Consumer on the ActiveMQ Artemis\" width=\"1024\" height=\"528\" srcset=\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_management_console_browser_consumer-1024x528.png 1024w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_management_console_browser_consumer-300x155.png 300w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_management_console_browser_consumer-768x396.png 768w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_management_console_browser_consumer-1536x792.png 1536w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_management_console_browser_consumer.png 1576w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><p id=\"caption-attachment-5139\" class=\"wp-caption-text\">Figure 12 - Browse the Consumer on the ActiveMQ Artemis<\/p><\/div>\n<p>&nbsp;<\/p>\n<div id=\"attachment_5138\" style=\"width: 1034px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_management_console_browser_connection.png\"><img aria-describedby=\"caption-attachment-5138\" decoding=\"async\" loading=\"lazy\" class=\"wp-image-5138 size-large\" title=\"Figure 13 - Browse the Connection on the ActiveMQ Artemis\" src=\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_management_console_browser_connection-1024x274.png\" alt=\"Figure 13 - Browse the Connection on the ActiveMQ Artemis\" width=\"1024\" height=\"274\" srcset=\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_management_console_browser_connection-1024x274.png 1024w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_management_console_browser_connection-300x80.png 300w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_management_console_browser_connection-768x206.png 768w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_management_console_browser_connection-1536x411.png 1536w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_management_console_browser_connection.png 1577w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><p id=\"caption-attachment-5138\" class=\"wp-caption-text\">Figure 13 - Browse the Connection on the ActiveMQ Artemis<\/p><\/div>\n<p>&nbsp;<\/p>\n<p>To subscribe to the topic RPI4.cpu-temp in order to be able to read the CPU temperature values, we could for simplicity use a very common MQTT client. In my case I used the <a href=\"http:\/\/mqtt-explorer.com\/\" target=\"_blank\" rel=\"noopener\">MQTT Explorer<\/a> application on macOS, the figures relating to the configuration of the connection to the Message Broker and the display of the data received, also in graphic form, are shown below.<\/p>\n<p>&nbsp;<\/p>\n<div id=\"attachment_5144\" style=\"width: 1034px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_mqtt_explore_connection_configuration_1.png\"><img aria-describedby=\"caption-attachment-5144\" decoding=\"async\" loading=\"lazy\" class=\"wp-image-5144 size-large\" title=\"Figure 14 - MQTT Explorer Connection configuration\" src=\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_mqtt_explore_connection_configuration_1-1024x724.png\" alt=\"Figure 14 - MQTT Explorer Connection configuration\" width=\"1024\" height=\"724\" srcset=\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_mqtt_explore_connection_configuration_1-1024x724.png 1024w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_mqtt_explore_connection_configuration_1-300x212.png 300w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_mqtt_explore_connection_configuration_1-768x543.png 768w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_mqtt_explore_connection_configuration_1.png 1029w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><p id=\"caption-attachment-5144\" class=\"wp-caption-text\">Figure 14 - MQTT Explorer Connection configuration<\/p><\/div>\n<p>&nbsp;<\/p>\n<div id=\"attachment_5143\" style=\"width: 869px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_mqtt_explore_configuration_topic_1.png\"><img aria-describedby=\"caption-attachment-5143\" decoding=\"async\" loading=\"lazy\" class=\"wp-image-5143 size-full\" title=\"Figure 15 - MQTT Explorer add the topic RPI4.cpu-temp\" src=\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_mqtt_explore_configuration_topic_1.png\" alt=\"Figure 15 - MQTT Explorer add the topic RPI4.cpu-temp\" width=\"859\" height=\"451\" srcset=\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_mqtt_explore_configuration_topic_1.png 859w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_mqtt_explore_configuration_topic_1-300x158.png 300w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_mqtt_explore_configuration_topic_1-768x403.png 768w\" sizes=\"auto, (max-width: 859px) 100vw, 859px\" \/><\/a><p id=\"caption-attachment-5143\" class=\"wp-caption-text\">Figure 15 - MQTT Explorer add the topic RPI4.cpu-temp<\/p><\/div>\n<p>&nbsp;<\/p>\n<div id=\"attachment_5145\" style=\"width: 1034px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_mqtt_explore_view_data_grapth_cpu_temperature.png\"><img aria-describedby=\"caption-attachment-5145\" decoding=\"async\" loading=\"lazy\" class=\"wp-image-5145 size-large\" title=\"Figure 16 - MQTT Explorer view data on the RPI4.cpu-temp\" src=\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_mqtt_explore_view_data_grapth_cpu_temperature-1024x615.png\" alt=\"Figure 16 - MQTT Explorer view data on the RPI4.cpu-temp\" width=\"1024\" height=\"615\" srcset=\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_mqtt_explore_view_data_grapth_cpu_temperature-1024x615.png 1024w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_mqtt_explore_view_data_grapth_cpu_temperature-300x180.png 300w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_mqtt_explore_view_data_grapth_cpu_temperature-768x461.png 768w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_mqtt_explore_view_data_grapth_cpu_temperature.png 1210w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><p id=\"caption-attachment-5145\" class=\"wp-caption-text\">Figure 16 - MQTT Explorer view data on the RPI4.cpu-temp<\/p><\/div>\n<p>&nbsp;<\/p>\n<p>On my iPhone I used the <a href=\"https:\/\/github.com\/philipparndt\/mqtt-analyzer\" target=\"_blank\" rel=\"noopener\">MQTT Analyzer<\/a> app but there are still similar apps for the Android platform, such as <a href=\"https:\/\/play.google.com\/store\/apps\/details?id=com.mightyit.mqttclientterminal&amp;hl=en&amp;gl=US\" target=\"_blank\" rel=\"noopener\">MQTT Terminal<\/a>. The figures below show some screenshots of the app as it reads the values \u200b\u200bfrom the RPI4.cpu-temp topic.<\/p>\n<p>&nbsp;<\/p>\n<div id=\"attachment_5151\" style=\"width: 310px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_ios_mqtt_analyzer_connection.png\"><img aria-describedby=\"caption-attachment-5151\" decoding=\"async\" loading=\"lazy\" class=\"wp-image-5151 size-medium\" title=\"Figure 17 - MQTT Analyzer Connection Settings\" src=\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_ios_mqtt_analyzer_connection-300x650.png\" alt=\"Figure 17 - MQTT Analyzer Connection Settings\" width=\"300\" height=\"650\" srcset=\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_ios_mqtt_analyzer_connection-300x650.png 300w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_ios_mqtt_analyzer_connection-1024x2217.png 1024w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_ios_mqtt_analyzer_connection-768x1663.png 768w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_ios_mqtt_analyzer_connection-709x1536.png 709w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_ios_mqtt_analyzer_connection-946x2048.png 946w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_ios_mqtt_analyzer_connection.png 1125w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><p id=\"caption-attachment-5151\" class=\"wp-caption-text\">Figure 17 - MQTT Analyzer Connection Settings<\/p><\/div>\n<p>&nbsp;<\/p>\n<div id=\"attachment_5152\" style=\"width: 310px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_ios_mqtt_analyzer_topic_data_series.png\"><img aria-describedby=\"caption-attachment-5152\" decoding=\"async\" loading=\"lazy\" class=\"wp-image-5152 size-medium\" title=\"Figure 18 - MQTT Analyzer Reading the value on the topic RPI4.cpu-temp\" src=\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_ios_mqtt_analyzer_topic_data_series-300x650.png\" alt=\"Figure 18 - MQTT Analyzer Reading the value on the topic RPI4.cpu-temp\" width=\"300\" height=\"650\" srcset=\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_ios_mqtt_analyzer_topic_data_series-300x650.png 300w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_ios_mqtt_analyzer_topic_data_series-1024x2217.png 1024w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_ios_mqtt_analyzer_topic_data_series-768x1663.png 768w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_ios_mqtt_analyzer_topic_data_series-709x1536.png 709w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_ios_mqtt_analyzer_topic_data_series-946x2048.png 946w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/activemq_artemis_ios_mqtt_analyzer_topic_data_series.png 1125w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><p id=\"caption-attachment-5152\" class=\"wp-caption-text\">Figure 18 - MQTT Analyzer Reading the value on the topic RPI4.cpu-temp<\/p><\/div>\n<p>&nbsp;<\/p>\n<p>At this point I would say that we can be satisfied with the result obtained. With this Message Broker the possible applications in the IoT field are truly countless, space for imagination.<\/p>\n<p>&nbsp;<\/p>\n<h2>5. Resources<\/h2>\n<p>Below I leave you a series of resources that are useful for in-depth analysis.<\/p>\n<ol>\n<li>Home del progetto ActiveMQ Artemis (<a href=\"https:\/\/activemq.apache.org\/components\/artemis\/\" target=\"_blank\" rel=\"noopener\">https:\/\/activemq.apache.org\/components\/artemis\/<\/a>)<\/li>\n<li>Easy Docker Creation (<a href=\"https:\/\/github.com\/apache\/activemq-artemis\/tree\/master\/artemis-docker\" target=\"_blank\" rel=\"noopener\">https:\/\/github.com\/apache\/activemq-artemis\/tree\/master\/artemis-docker<\/a>)<\/li>\n<li>Apache ActiveMQ Artemis Documentation (<a href=\"https:\/\/activemq.apache.org\/components\/artemis\/documentation\/\" target=\"_blank\" rel=\"noopener\">https:\/\/activemq.apache.org\/components\/artemis\/documentation\/<\/a>)<\/li>\n<li><a href=\"https:\/\/www.dontesta.it\/2019\/08\/04\/raspberry-pi-sense-hat-come-pubblicare-dati-cloudamqp-mqtt\/\" target=\"_blank\" rel=\"noopener\">Raspberry PI Sense HAT: Come pubblicare i dati su CloudAMQP via MQTT<\/a><\/li>\n<li><a href=\"https:\/\/www.dontesta.it\/2020\/08\/23\/raspberry-pi-come-eseguire-docker-container-apache-karaf\/\">Raspberry Pi: Come eseguire un Docker Container Apache Karaf 4.2<\/a><\/li>\n<li><a href=\"https:\/\/www.dontesta.it\/2020\/09\/10\/docker-how-to-create-apache-karaf-images-for-arm-and-arm64\/\">Docker: How to create Apache Karaf images for ARM and ARM64<\/a><\/li>\n<li>Internet of Things with Raspberry Pi 3 (<a href=\"https:\/\/www.packtpub.com\/product\/internet-of-things-with-raspberry-pi-3\/9781788627405\" target=\"_blank\" rel=\"noopener\" class=\"broken_link\">https:\/\/www.packtpub.com\/product\/internet-of-things-with-raspberry-pi-3\/9781788627405<\/a>)<\/li>\n<li>Practical Python Programming for IoT (<a href=\"https:\/\/www.packtpub.com\/product\/practical-python-programming-for-iot\/9781838982461\" target=\"_blank\" rel=\"noopener\" class=\"broken_link\">https:\/\/www.packtpub.com\/product\/practical-python-programming-for-iot\/9781838982461<\/a>)<\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<h2>6. Conclusions<\/h2>\n<p><strong>Did you think it was so easy to install Apache ActiveMQ Artemis even on ARM hardware architectures?<\/strong><\/p>\n<p>You thought it was so easy to install Apache ActiveMQ Artemis on ARM hardware architectures?<\/p>\n<p>Thanks to the partnership between Docker and ARM (see <a href=\"https:\/\/dockr.ly\/2VYOOWd\" target=\"_blank\" rel=\"noopener\" class=\"broken_link\">Docker announced a partnership with ARM<\/a>) announced in April 2019, today we were able to run the ActiveMQ Artemis Docker container on the Raspberry Pi <strong>linux\/arm<\/strong> architecture.<\/p>\n<p>Thanks to <a href=\"https:\/\/docs.docker.com\/buildx\/working-with-buildx\/\" target=\"_blank\" rel=\"noopener\">buildx<\/a> (from Docker) we can then create <strong>multi-arch<\/strong> images for both ARM and x86 using Docker. Thanks to the buildx tool, we were able to prepare the Artemis ActiveMQ image for <strong>linux\/arm64<\/strong> and <strong>linux\/arm\/v7<\/strong> which we then used to install the multi-protocol Message Broker service on the Raspberry Pi.<\/p>\n<p>&nbsp;<\/p>","protected":false},"excerpt":{"rendered":"<p>For some time I have been carrying out projects that revolve around the IoT (Internet Of Things) ecosystem using SBC (Single Board Computers) such as the Raspberry Pi. Within the IoT ecosystem, the Message&#46;&#46;&#46;<\/p>\n","protected":false},"author":3,"featured_media":5162,"comment_status":"open","ping_status":"open","sticky":true,"template":"","format":"image","meta":{"_import_markdown_pro_load_document_selector":0,"_import_markdown_pro_submit_text_textarea":"","_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[490,679],"tags":[697,671,680,681,627],"class_list":["post-5113","post","type-post","status-publish","format-image","has-post-thumbnail","hentry","category-blog-2","category-iot","tag-arm","tag-docker","tag-iot","tag-mqtt","tag-raspberry","post_format-post-format-image"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v25.1 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>ActiveMQ Artemis: Easy Docker Creation also for ARM<\/title>\n<meta name=\"description\" content=\"Vuoi saper come eseguire ActiveMQ Artemis su Docker e su piattaforma ARM come per esempio su Raspberry Pi? In questo articolo di mostro come fare.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.dontesta.it\/en\/2021\/02\/15\/activemq-artemis-easy-docker-creation-also-for-arm\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"ActiveMQ Artemis: Easy Docker Creation also for ARM\" \/>\n<meta property=\"og:description\" content=\"Vuoi saper come eseguire ActiveMQ Artemis su Docker e su piattaforma ARM come per esempio su Raspberry Pi? In questo articolo di mostro come fare.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dontesta.it\/en\/2021\/02\/15\/activemq-artemis-easy-docker-creation-also-for-arm\/\" \/>\n<meta property=\"og:site_name\" content=\"Antonio Musarra&#039;s Blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/antoniomusarrablog\" \/>\n<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/antoniomusarrablog\" \/>\n<meta property=\"article:published_time\" content=\"2021-02-15T17:35:19+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-03-13T11:39:25+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/FeatureImage_ActiveMQArtemisEasyDockerCreationAlsoForARM.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t<meta property=\"og:image:height\" content=\"512\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Antonio Musarra\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@antonio_musarra\" \/>\n<meta name=\"twitter:site\" content=\"@antonio_musarra\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Antonio Musarra\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"14 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.dontesta.it\/en\/2021\/02\/15\/activemq-artemis-easy-docker-creation-also-for-arm\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.dontesta.it\/en\/2021\/02\/15\/activemq-artemis-easy-docker-creation-also-for-arm\/\"},\"author\":{\"name\":\"Antonio Musarra\",\"@id\":\"https:\/\/www.dontesta.it\/#\/schema\/person\/0c69ed36230e1477875d6171b48b9b24\"},\"headline\":\"ActiveMQ Artemis: Easy Docker Creation also for ARM\",\"datePublished\":\"2021-02-15T17:35:19+00:00\",\"dateModified\":\"2022-03-13T11:39:25+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.dontesta.it\/en\/2021\/02\/15\/activemq-artemis-easy-docker-creation-also-for-arm\/\"},\"wordCount\":4336,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.dontesta.it\/#\/schema\/person\/0c69ed36230e1477875d6171b48b9b24\"},\"image\":{\"@id\":\"https:\/\/www.dontesta.it\/en\/2021\/02\/15\/activemq-artemis-easy-docker-creation-also-for-arm\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/FeatureImage_ActiveMQArtemisEasyDockerCreationAlsoForARM.png\",\"keywords\":[\"ARM\",\"Docker\",\"IoT\",\"MQTT\",\"Raspberry\"],\"articleSection\":[\"Blog\",\"IoT\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.dontesta.it\/en\/2021\/02\/15\/activemq-artemis-easy-docker-creation-also-for-arm\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.dontesta.it\/en\/2021\/02\/15\/activemq-artemis-easy-docker-creation-also-for-arm\/\",\"url\":\"https:\/\/www.dontesta.it\/en\/2021\/02\/15\/activemq-artemis-easy-docker-creation-also-for-arm\/\",\"name\":\"ActiveMQ Artemis: Easy Docker Creation also for ARM\",\"isPartOf\":{\"@id\":\"https:\/\/www.dontesta.it\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.dontesta.it\/en\/2021\/02\/15\/activemq-artemis-easy-docker-creation-also-for-arm\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.dontesta.it\/en\/2021\/02\/15\/activemq-artemis-easy-docker-creation-also-for-arm\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/FeatureImage_ActiveMQArtemisEasyDockerCreationAlsoForARM.png\",\"datePublished\":\"2021-02-15T17:35:19+00:00\",\"dateModified\":\"2022-03-13T11:39:25+00:00\",\"description\":\"Vuoi saper come eseguire ActiveMQ Artemis su Docker e su piattaforma ARM come per esempio su Raspberry Pi? In questo articolo di mostro come fare.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.dontesta.it\/en\/2021\/02\/15\/activemq-artemis-easy-docker-creation-also-for-arm\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.dontesta.it\/en\/2021\/02\/15\/activemq-artemis-easy-docker-creation-also-for-arm\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.dontesta.it\/en\/2021\/02\/15\/activemq-artemis-easy-docker-creation-also-for-arm\/#primaryimage\",\"url\":\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/FeatureImage_ActiveMQArtemisEasyDockerCreationAlsoForARM.png\",\"contentUrl\":\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/FeatureImage_ActiveMQArtemisEasyDockerCreationAlsoForARM.png\",\"width\":1024,\"height\":512,\"caption\":\"ActiveMQ Artemis Easy Docker Creation also for ARM\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.dontesta.it\/en\/2021\/02\/15\/activemq-artemis-easy-docker-creation-also-for-arm\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.dontesta.it\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"ActiveMQ Artemis: Easy Docker Creation also for ARM\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.dontesta.it\/#website\",\"url\":\"https:\/\/www.dontesta.it\/\",\"name\":\"Antonio Musarra&#039;s Blog\",\"description\":\"The ideal solution for a problem\",\"publisher\":{\"@id\":\"https:\/\/www.dontesta.it\/#\/schema\/person\/0c69ed36230e1477875d6171b48b9b24\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.dontesta.it\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/www.dontesta.it\/#\/schema\/person\/0c69ed36230e1477875d6171b48b9b24\",\"name\":\"Antonio Musarra\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.dontesta.it\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2024\/06\/cropped-foto_profilo.png\",\"contentUrl\":\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2024\/06\/cropped-foto_profilo.png\",\"width\":512,\"height\":512,\"caption\":\"Antonio Musarra\"},\"logo\":{\"@id\":\"https:\/\/www.dontesta.it\/#\/schema\/person\/image\/\"},\"description\":\"I began my journey into the world of computing from an Olivetti M24 PC (http:\/\/it.wikipedia.org\/wiki\/Olivetti_M24) bought by my father for his work. Day after day, quickly taking control until \u2026 Now doing business consulting for projects in the enterprise application development using web-oriented technologies such as J2EE, Web Services, ESB, TIBCO, PHP.\",\"sameAs\":[\"https:\/\/www.dontesta.it\",\"https:\/\/www.facebook.com\/antoniomusarrablog\",\"https:\/\/www.linkedin.com\/in\/amusarra\/\",\"https:\/\/x.com\/antonio_musarra\",\"https:\/\/www.youtube.com\/channel\/UC5D3_EtVPbZYUhrUcEK_THA\/\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"ActiveMQ Artemis: Easy Docker Creation also for ARM","description":"Vuoi saper come eseguire ActiveMQ Artemis su Docker e su piattaforma ARM come per esempio su Raspberry Pi? In questo articolo di mostro come fare.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.dontesta.it\/en\/2021\/02\/15\/activemq-artemis-easy-docker-creation-also-for-arm\/","og_locale":"en_US","og_type":"article","og_title":"ActiveMQ Artemis: Easy Docker Creation also for ARM","og_description":"Vuoi saper come eseguire ActiveMQ Artemis su Docker e su piattaforma ARM come per esempio su Raspberry Pi? In questo articolo di mostro come fare.","og_url":"https:\/\/www.dontesta.it\/en\/2021\/02\/15\/activemq-artemis-easy-docker-creation-also-for-arm\/","og_site_name":"Antonio Musarra&#039;s Blog","article_publisher":"https:\/\/www.facebook.com\/antoniomusarrablog","article_author":"https:\/\/www.facebook.com\/antoniomusarrablog","article_published_time":"2021-02-15T17:35:19+00:00","article_modified_time":"2022-03-13T11:39:25+00:00","og_image":[{"width":1024,"height":512,"url":"https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/FeatureImage_ActiveMQArtemisEasyDockerCreationAlsoForARM.png","type":"image\/png"}],"author":"Antonio Musarra","twitter_card":"summary_large_image","twitter_creator":"@antonio_musarra","twitter_site":"@antonio_musarra","twitter_misc":{"Written by":"Antonio Musarra","Est. reading time":"14 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.dontesta.it\/en\/2021\/02\/15\/activemq-artemis-easy-docker-creation-also-for-arm\/#article","isPartOf":{"@id":"https:\/\/www.dontesta.it\/en\/2021\/02\/15\/activemq-artemis-easy-docker-creation-also-for-arm\/"},"author":{"name":"Antonio Musarra","@id":"https:\/\/www.dontesta.it\/#\/schema\/person\/0c69ed36230e1477875d6171b48b9b24"},"headline":"ActiveMQ Artemis: Easy Docker Creation also for ARM","datePublished":"2021-02-15T17:35:19+00:00","dateModified":"2022-03-13T11:39:25+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dontesta.it\/en\/2021\/02\/15\/activemq-artemis-easy-docker-creation-also-for-arm\/"},"wordCount":4336,"commentCount":0,"publisher":{"@id":"https:\/\/www.dontesta.it\/#\/schema\/person\/0c69ed36230e1477875d6171b48b9b24"},"image":{"@id":"https:\/\/www.dontesta.it\/en\/2021\/02\/15\/activemq-artemis-easy-docker-creation-also-for-arm\/#primaryimage"},"thumbnailUrl":"https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/FeatureImage_ActiveMQArtemisEasyDockerCreationAlsoForARM.png","keywords":["ARM","Docker","IoT","MQTT","Raspberry"],"articleSection":["Blog","IoT"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.dontesta.it\/en\/2021\/02\/15\/activemq-artemis-easy-docker-creation-also-for-arm\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.dontesta.it\/en\/2021\/02\/15\/activemq-artemis-easy-docker-creation-also-for-arm\/","url":"https:\/\/www.dontesta.it\/en\/2021\/02\/15\/activemq-artemis-easy-docker-creation-also-for-arm\/","name":"ActiveMQ Artemis: Easy Docker Creation also for ARM","isPartOf":{"@id":"https:\/\/www.dontesta.it\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.dontesta.it\/en\/2021\/02\/15\/activemq-artemis-easy-docker-creation-also-for-arm\/#primaryimage"},"image":{"@id":"https:\/\/www.dontesta.it\/en\/2021\/02\/15\/activemq-artemis-easy-docker-creation-also-for-arm\/#primaryimage"},"thumbnailUrl":"https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/FeatureImage_ActiveMQArtemisEasyDockerCreationAlsoForARM.png","datePublished":"2021-02-15T17:35:19+00:00","dateModified":"2022-03-13T11:39:25+00:00","description":"Vuoi saper come eseguire ActiveMQ Artemis su Docker e su piattaforma ARM come per esempio su Raspberry Pi? In questo articolo di mostro come fare.","breadcrumb":{"@id":"https:\/\/www.dontesta.it\/en\/2021\/02\/15\/activemq-artemis-easy-docker-creation-also-for-arm\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dontesta.it\/en\/2021\/02\/15\/activemq-artemis-easy-docker-creation-also-for-arm\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.dontesta.it\/en\/2021\/02\/15\/activemq-artemis-easy-docker-creation-also-for-arm\/#primaryimage","url":"https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/FeatureImage_ActiveMQArtemisEasyDockerCreationAlsoForARM.png","contentUrl":"https:\/\/www.dontesta.it\/wp-content\/uploads\/2021\/02\/FeatureImage_ActiveMQArtemisEasyDockerCreationAlsoForARM.png","width":1024,"height":512,"caption":"ActiveMQ Artemis Easy Docker Creation also for ARM"},{"@type":"BreadcrumbList","@id":"https:\/\/www.dontesta.it\/en\/2021\/02\/15\/activemq-artemis-easy-docker-creation-also-for-arm\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.dontesta.it\/"},{"@type":"ListItem","position":2,"name":"ActiveMQ Artemis: Easy Docker Creation also for ARM"}]},{"@type":"WebSite","@id":"https:\/\/www.dontesta.it\/#website","url":"https:\/\/www.dontesta.it\/","name":"Antonio Musarra&#039;s Blog","description":"The ideal solution for a problem","publisher":{"@id":"https:\/\/www.dontesta.it\/#\/schema\/person\/0c69ed36230e1477875d6171b48b9b24"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.dontesta.it\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/www.dontesta.it\/#\/schema\/person\/0c69ed36230e1477875d6171b48b9b24","name":"Antonio Musarra","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.dontesta.it\/#\/schema\/person\/image\/","url":"https:\/\/www.dontesta.it\/wp-content\/uploads\/2024\/06\/cropped-foto_profilo.png","contentUrl":"https:\/\/www.dontesta.it\/wp-content\/uploads\/2024\/06\/cropped-foto_profilo.png","width":512,"height":512,"caption":"Antonio Musarra"},"logo":{"@id":"https:\/\/www.dontesta.it\/#\/schema\/person\/image\/"},"description":"I began my journey into the world of computing from an Olivetti M24 PC (http:\/\/it.wikipedia.org\/wiki\/Olivetti_M24) bought by my father for his work. Day after day, quickly taking control until \u2026 Now doing business consulting for projects in the enterprise application development using web-oriented technologies such as J2EE, Web Services, ESB, TIBCO, PHP.","sameAs":["https:\/\/www.dontesta.it","https:\/\/www.facebook.com\/antoniomusarrablog","https:\/\/www.linkedin.com\/in\/amusarra\/","https:\/\/x.com\/antonio_musarra","https:\/\/www.youtube.com\/channel\/UC5D3_EtVPbZYUhrUcEK_THA\/"]}]}},"_links":{"self":[{"href":"https:\/\/www.dontesta.it\/en\/wp-json\/wp\/v2\/posts\/5113","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dontesta.it\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dontesta.it\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dontesta.it\/en\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dontesta.it\/en\/wp-json\/wp\/v2\/comments?post=5113"}],"version-history":[{"count":0,"href":"https:\/\/www.dontesta.it\/en\/wp-json\/wp\/v2\/posts\/5113\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.dontesta.it\/en\/wp-json\/wp\/v2\/media\/5162"}],"wp:attachment":[{"href":"https:\/\/www.dontesta.it\/en\/wp-json\/wp\/v2\/media?parent=5113"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dontesta.it\/en\/wp-json\/wp\/v2\/categories?post=5113"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dontesta.it\/en\/wp-json\/wp\/v2\/tags?post=5113"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}