Skip to content

Commit 33da2ec

Browse files
Merge pull request #2641 from odidev/rabbitmq_LP
Deploy RabbitMQ on Google Cloud C4A (Arm-based Axion VMs)
2 parents bf0b636 + 6567f21 commit 33da2ec

10 files changed

Lines changed: 921 additions & 0 deletions

File tree

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
---
2+
title: Deploy RabbitMQ on Google Cloud C4A (Arm-based Axion VMs)
3+
4+
minutes_to_complete: 30
5+
6+
who_is_this_for: This is an introductory topic for software engineers and platform engineers migrating messaging and event-driven workloads from x86_64 to Arm-based servers, specifically on Google Cloud C4A virtual machines powered by Axion processors.
7+
8+
learning_objectives:
9+
- Provision an Arm-based SUSE SLES virtual machine on Google Cloud (C4A with Axion processors)
10+
- Install and configure RabbitMQ on a SUSE Arm64 (C4A) instance
11+
- Validate RabbitMQ deployment using baseline messaging tests
12+
- Implement real-world RabbitMQ use cases such as event-driven processing and notification pipelines
13+
14+
prerequisites:
15+
- A [Google Cloud Platform (GCP)](https://cloud.google.com/free) account with billing enabled
16+
- Basic understanding of message queues and messaging concepts (publishers, consumers)
17+
- Familiarity with Linux command-line operations
18+
19+
author: Pareena Verma
20+
21+
##### Tags
22+
skilllevels: Introductory
23+
subjects: Databases
24+
cloud_service_providers: Google Cloud
25+
26+
armips:
27+
- Neoverse
28+
29+
tools_software_languages:
30+
- RabbitMQ
31+
- Erlang
32+
- Python
33+
- pika
34+
35+
operatingsystems:
36+
- Linux
37+
38+
# ================================================================================
39+
# FIXED, DO NOT MODIFY
40+
# ================================================================================
41+
further_reading:
42+
- resource:
43+
title: Google Cloud documentation
44+
link: https://cloud.google.com/docs
45+
type: documentation
46+
47+
- resource:
48+
title: RabbitMQ documentation
49+
link: https://www.rabbitmq.com/documentation.html
50+
type: documentation
51+
52+
- resource:
53+
title: RabbitMQ Tutorials
54+
link: https://www.rabbitmq.com/getstarted.html
55+
type: documentation
56+
57+
weight: 1
58+
layout: "learningpathall"
59+
learning_path_main_page: "yes"
60+
---
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
---
2+
# ================================================================================
3+
# FIXED, DO NOT MODIFY THIS FILE
4+
# ================================================================================
5+
weight: 21 # Set to always be larger than the content in this path to be at the end of the navigation.
6+
title: "Next Steps" # Always the same, html page title.
7+
layout: "learningpathall" # All files under learning paths have this same wrapper for Hugo processing.
8+
---
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
---
2+
title: Getting started with RabbitMQ on Google Axion C4A (Arm Neoverse-V2)
3+
4+
weight: 2
5+
6+
layout: "learningpathall"
7+
---
8+
9+
## Google Axion C4A Arm instances in Google Cloud
10+
11+
Google Axion C4A is a family of Arm-based virtual machines built on Google’s custom Axion CPU, which is based on Arm Neoverse-V2 cores. Designed for high-performance and energy-efficient computing, these virtual machines offer strong performance for modern cloud workloads such as CI/CD pipelines, microservices, media processing, and general-purpose applications.
12+
13+
The C4A series provides a cost-effective alternative to x86 virtual machines while leveraging the scalability and performance benefits of the Arm architecture in Google Cloud.
14+
15+
To learn more about Google Axion, refer to the [Introducing Google Axion Processors, our new Arm-based CPUs](https://cloud.google.com/blog/products/compute/introducing-googles-new-arm-based-cpu) blog.
16+
17+
## RabbitMQ
18+
19+
RabbitMQ is an open-source **message broker** that enables applications to communicate asynchronously using messaging patterns such as queues, publish/subscribe, and routing. It acts as an intermediary that reliably receives, stores, and forwards messages between producers and consumers.
20+
21+
RabbitMQ helps decouple application components, improve scalability, and increase fault tolerance by ensuring messages are not lost and can be processed independently. It supports multiple messaging protocols, including AMQP, and provides features such as message durability, acknowledgments, routing via exchanges, and flexible delivery guarantees.
22+
23+
RabbitMQ is widely used for **event-driven architectures**, **background job processing**, **microservices communication**, and **notification systems**. It integrates easily with many programming languages and platforms.
24+
25+
Learn more from the [RabbitMQ official website](https://www.rabbitmq.com/) and the [official documentation](https://www.rabbitmq.com/documentation.html).
Lines changed: 138 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,138 @@
1+
---
2+
title: RabbitMQ Baseline Testing on Google Axion C4A Arm Virtual Machine
3+
weight: 5
4+
5+
### FIXED, DO NOT MODIFY
6+
layout: learningpathall
7+
---
8+
9+
## RabbitMQ Baseline Validation on GCP SUSE Arm64 VM
10+
This document defines a **baseline validation procedure** for RabbitMQ installed on a **Google Cloud SUSE Linux Arm64 virtual machine**.
11+
The purpose of this baseline is to confirm:
12+
13+
- RabbitMQ service health
14+
- Management plugin availability
15+
- Queue operations (create, publish, consume)
16+
- CLI tooling functionality (`rabbitmqctl` and `rabbitmqadmin`)
17+
18+
### Check RabbitMQ Node Status
19+
Verify that the RabbitMQ node is operational and healthy.
20+
21+
```console
22+
sudo rabbitmqctl status
23+
```
24+
- Node status reports RabbitMQ is running
25+
- No active alarms
26+
- Listeners are active on ports 5672 and 15672
27+
- Memory and disk space are within safe limits
28+
29+
### Verify Enabled Plugins
30+
Confirm that the RabbitMQ management plugins are enabled.
31+
32+
```console
33+
sudo rabbitmq-plugins list | grep management
34+
```
35+
36+
You should see an output similar to:
37+
```output
38+
[ ] rabbitmq_federation_management 4.2.0
39+
[E*] rabbitmq_management 4.2.0
40+
[e*] rabbitmq_management_agent 4.2.0
41+
[ ] rabbitmq_shovel_management 4.2.0
42+
[ ] rabbitmq_stream_management 4.2.0
43+
```
44+
45+
### Validate RabbitMQ Listeners
46+
Ensure RabbitMQ is listening on the required ports.
47+
48+
```console
49+
sudo rabbitmqctl status | grep -A5 Listeners
50+
```
51+
52+
You should see an output similar to:
53+
```output
54+
Listeners
55+
56+
Interface: [::], port: 15672, protocol: http, purpose: HTTP API
57+
Interface: [::], port: 25672, protocol: clustering, purpose: inter-node and CLI tool communication
58+
Interface: [::], port: 5672, protocol: amqp, purpose: AMQP 0-9-1 and AMQP 1.0
59+
```
60+
61+
### Download RabbitMQ Admin CLI Tool
62+
Download the rabbitmqadmin CLI tool from the local management endpoint.
63+
64+
```console
65+
curl -u guest:guest http://localhost:15672/cli/rabbitmqadmin -o rabbitmqadmin
66+
```
67+
**Make the tool executable:**
68+
69+
```console
70+
chmod +x rabbitmqadmin
71+
```
72+
### Validate Queue Creation
73+
Create a test queue to validate write operations.
74+
75+
```console
76+
./rabbitmqadmin declare queue name=testqueue durable=false
77+
```
78+
79+
You should see an output similar to:
80+
```output
81+
queue declared
82+
```
83+
84+
### Publish a Test Message
85+
Send a test message to the queue.
86+
87+
```console
88+
./rabbitmqadmin publish exchange=amq.default routing_key=testqueue payload="hello world"
89+
```
90+
91+
You should see an output similar to:
92+
```output
93+
Message published
94+
```
95+
96+
### Consume Message From Queue
97+
Retrieve messages from the queue to verify read functionality.
98+
99+
```console
100+
./rabbitmqadmin get queue=testqueue
101+
```
102+
103+
You should see an output similar to:
104+
```output
105+
+-------------+----------+---------------+-------------+---------------+------------------+------------+-------------+
106+
| routing_key | exchange | message_count | payload | payload_bytes | payload_encoding | properties | redelivered |
107+
+-------------+----------+---------------+-------------+---------------+------------------+------------+-------------+
108+
| testqueue | | 0 | hello world | 11 | string | | False |
109+
+-------------+----------+---------------+-------------+---------------+------------------+------------+-------------+
110+
```
111+
112+
### Verify Queue State
113+
Confirm that the queue is empty after consumption.
114+
115+
```console
116+
./rabbitmqadmin list queues name messages
117+
```
118+
119+
You should see an output similar to:
120+
```output
121+
+--------------+----------+
122+
| name | messages |
123+
+--------------+----------+
124+
| jobs | 0 |
125+
| order.events | 1 |
126+
| testqueue | 1 |
127+
```
128+
129+
Baseline Validation Summary
130+
131+
- RabbitMQ node is running and healthy
132+
- The management plugin is enabled and accessible
133+
- Queue creation is successful
134+
- Message publishing works as expected
135+
- Message consumption functions correctly
136+
- CLI tools operate without error
137+
138+
This confirms a successful baseline validation of RabbitMQ on a GCP SUSE Arm64 virtual machine.
261 KB
Loading
108 KB
Loading
Lines changed: 144 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,144 @@
1+
---
2+
title: Install RabbitMQ
3+
weight: 4
4+
5+
### FIXED, DO NOT MODIFY
6+
layout: learningpathall
7+
---
8+
9+
## Install RabbitMQ on GCP SUSE Arm64 VM
10+
This guide describes a **step-by-step installation of RabbitMQ** on a **Google Cloud Platform SUSE Linux Arm64 virtual machine**, using **RPM packages** for both **Erlang** and **RabbitMQ Server**.
11+
12+
RabbitMQ requires Erlang to be installed before setting up the server.
13+
14+
15+
### Prerequisites
16+
17+
- GCP SUSE Linux Enterprise Server (Arm64)
18+
- Root or sudo privileges
19+
- Outbound internet access
20+
21+
### Refresh System Repositories
22+
This step updates the system’s package list so the operating system knows about the latest software available from its repositories.
23+
24+
```console
25+
sudo zypper refresh
26+
```
27+
28+
### Install Required System Utilities
29+
You can install the basic tools needed to download and manage packages.
30+
31+
```console
32+
sudo zypper install -y curl wget gnupg tar socat logrotate
33+
```
34+
35+
### Download Erlang RPM (Arm64)
36+
RabbitMQ depends on Erlang. Download the Erlang RPM compatible with the Arm64 architecture.
37+
38+
```console
39+
wget https://github.com/rabbitmq/erlang-rpm/releases/download/v26.2.5/erlang-26.2.5-1.el8.aarch64.rpm
40+
sudo rpm -Uvh erlang-26.2.5-1.el8.aarch64.rpm
41+
```
42+
43+
### Verify Erlang Installation
44+
Confirm that Erlang is installed correctly.
45+
46+
```console
47+
erl -eval 'io:format("~s~n", [erlang:system_info(system_version)]), halt().' -noshell
48+
```
49+
50+
You should see an output similar to:
51+
52+
```output
53+
Erlang/OTP 26 [erts-14.2.5] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:1] [jit]
54+
```
55+
56+
### Download RabbitMQ Server RPM
57+
Download the RabbitMQ Server RPM package.
58+
59+
```console
60+
wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v4.2.0/rabbitmq-server-4.2.0-1.el8.noarch.rpm
61+
sudo rpm -Uvh rabbitmq-server-4.2.0-1.el8.noarch.rpm
62+
```
63+
64+
{{% notice Note %}}
65+
RabbitMQ version 3.11.0 introduced significant performance enhancements for Arm-based architectures. This version requires Erlang 25.0 or later, which brings Just-In-Time (JIT) compilation and modern flame graph profiling tooling to both x86 and ARM64 CPUs. These features result in improved performance on ARM64 architectures.
66+
You can view [this release note](https://github.com/rabbitmq/rabbitmq-server/blob/main/release-notes/3.11.0.md)
67+
68+
The [Arm Ecosystem Dashboard](https://developer.arm.com/ecosystem-dashboard/) recommends RabbitMQ version 3.11.0, the minimum recommended on the Arm platforms.
69+
{{% /notice %}}
70+
71+
### Enable and Start RabbitMQ Service
72+
Enable RabbitMQ to start automatically on boot and start the service immediately.
73+
74+
```console
75+
sudo systemctl enable rabbitmq-server --now
76+
```
77+
78+
### Verify RabbitMQ Service Status
79+
Check the status of the RabbitMQ service.
80+
81+
```console
82+
sudo systemctl status rabbitmq-server
83+
```
84+
85+
The service should be in an active (running) state.
86+
87+
### Enable RabbitMQ Management Plugin
88+
Enable the RabbitMQ management plugin to access the web-based dashboard.
89+
90+
```console
91+
sudo rabbitmq-plugins enable rabbitmq_management
92+
```
93+
94+
### Restart RabbitMQ
95+
Restart RabbitMQ to apply plugin changes.
96+
97+
```console
98+
sudo systemctl restart rabbitmq-server
99+
```
100+
101+
### Verify RabbitMQ Version
102+
Confirm the installed RabbitMQ version.
103+
104+
```console
105+
sudo rabbitmqctl version
106+
```
107+
108+
You should see an output similar to:
109+
110+
```output
111+
4.2.0
112+
```
113+
114+
### Access RabbitMQ Management UI
115+
Create a new RabbitMQ user for remote access
116+
117+
- Create a new `admin` user
118+
119+
**Run these commands on the VM:**
120+
121+
```console
122+
sudo rabbitmqctl add_user admin StrongPassword123
123+
sudo rabbitmqctl set_user_tags admin administrator
124+
sudo rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"
125+
```
126+
127+
**Log in to Management UI**
128+
129+
- **URL**: http://<VM_IP>:15672
130+
- **Username**: admin
131+
- **Password**: StrongPassword123
132+
133+
This is the production-safe approach.
134+
135+
Now, let’s test it from outside the VM. Open a web browser on your local machine (Chrome, Firefox, Edge, etc.) and enter the following URL in the address bar:
136+
137+
```console
138+
[http://<YOUR_VM_PUBLIC_IP>/info.php](http://<VM_IP>:15672)
139+
```
140+
- Replace `<VM_IP>` with the public IP of your GCP VM.
141+
142+
If everything is set up correctly, you will see a RabbitMQ login page in your browser. It looks like this:
143+
144+
![RabbitMQ page alt-text#center](images/rabbitmq.png "Figure 1: RabbitMQ Login page")

0 commit comments

Comments
 (0)