Installing AMQ Online
You have two options for installing AMQ Online: download and extract the ZIP file with the YAML bundle or you can install the AMQ Online Operator on an OpenShift Container Platform 4.x cluster by using OperatorHub in the OpenShift Container Platform console. In this quick start, we will use the YAML bundle. You can check the Evaluating AMQ Online on OpenShift documentation for further instructions on how to install AMQ Online using OperatorHub.
Download and extract
To download and extract the installation file:
-
Download the latest version of AMQ Online's Operator Installation and Example Files. The latest version at the time of this writing is Red Hat AMQ Online 1.7.
-
Unzip AMQ Online installation resources to any destination:
-
On Windows or Mac, extract the contents of the ZIP archive by double-clicking on the ZIP file.
-
On Red Hat Enterprise Linux (RHEL), open a terminal window in the target machine and navigate to where the ZIP file was downloaded. Extract the ZIP file by executing the following command:
# unzip amq-online-1.7.0-install.zip
-
-
Change the current path to the unzipped directory.
# cd amq-online-1.7.0-install
Install AMQ Online using a YAML bundle
To install AMQ Online using a YAML bundle:
-
Log into the OpenShift cluster with cluster-admin privileges, for example:
# oc login -u system:admin
-
By default, the installation files work in the
amq-online-infra
namespace. Modify the installation files according to the namespace where you will install AMQ Online, for examplemessaging
:-
On Linux, use:
# sed -i 's/amq-online-infra/messaging/' install/bundles/amq-online/*.yaml
-
On Mac:
# sed -i '' 's/amq-online-infra/messaging/' install/bundles/amq-online/*.yaml
-
-
Create the project into which you're deploying AMQ Online, for example
messaging
:# oc new-project messaging
-
Deploy using the AMQ Online bundle:
# oc apply -f install/bundles/amq-online
-
Install the example plans and infrastructure configuration:
# oc apply -f install/components/example-plans
-
Install the example roles:
# oc apply -f install/components/example-roles
-
Install the
standard
authentication service:# oc apply -f install/components/example-authservices/standard-authservice.yaml
Create an address endpoint
To create an address endpoint, you need to create a messaging address space. In AMQ Online, you create address spaces using standard command-line tools. For example:
-
Log in as a normal user, like
developer
:# oc login -u developer
# oc new-project my-app-project
-
Create a new address space (e.g.,
my-address-space
) definition of typestandard
with astandard small
plan:# cat << EOF | oc create -f - apiVersion: enmasse.io/v1beta1 kind: AddressSpace metadata: name: my-address-space spec: type: standard plan: standard-small EOF
-
Check the status of the address space creation, which should return
true
when provisioning is done:# echo `oc get addressspace my-address-space -o jsonpath='{.status.isReady}'`
It may take a few moments.
-
Now that you have an address space, you can create an address definition named
my-queue
of typequeue
with astandard-small-queue
plan:# cat << EOF | oc create -f - apiVersion: enmasse.io/v1beta1 kind: Address metadata: name: my-address-space.my-queue spec: address: my-queue type: queue plan: standard-small-queue EOF
-
Create a messaging user to access the queue with send and receive permissions:
# cat << EOF | oc create -f - apiVersion: user.enmasse.io/v1beta1 kind: MessagingUser metadata: name: my-address-space.user1 spec: username: user1 authentication: type: password password: cGFzc3dvcmQ= # Base64 encoded authorization: - addresses: ["my-queue"] operations: ["send", "recv"] EOF
You are now ready to start sending and receiving messages.
Send and receive messages
Finally, it's time to test sending and receiving messages using an external application. You will need to use Java 8 to run the following sample code.
-
Clone this git repo to test the access from an application to your new AMQ Online addresses:
$ git clone https://github.com/hguerrero/amq-examples.git
- Switch to the
camel-amqp-demo
folder:$ cd amq-examples/camel-amqp-demo/
- As we are using Routes for external access to the cluster, we need the cluster CA certificate to enable TLS in the client. Extract the public certificate of the broker certification authority:
$ oc get addressspace my-address-space -o jsonpath='{.status.caCert}{"\n"}' | base64 --decode > src/main/resources/ca.crt
- Import the trusted cert to a keystore:
$ keytool -import -trustcacerts -alias root -file src/main/resources/ca.crt -keystore src/main/resources/truststore.ts -storepass password -noprompt
- Now you can run the Red Hat Fuse application to send and receive messages to the AMQ Online messaging address endpoint using the following maven command (this command requires Java 8):
$ mvn -Drun.jvmArguments="-Damq.url=amqps://`oc get addressspace my-address-space -o jsonpath='{.status.endpointStatuses[?(@.name=="messaging")].externalHost}{"\n"}'`:443 -Damq.destination=queue:my-queue" clean package spring-boot:run
After finishing the clean and package phases, you will see the Spring Boot application start creating a producer and a consumer sending and receiving 100 messages to the “my-queue” AMQ Online queue address:
14:35:52.607 [CamelMainRunController] INFO o.a.camel.spring.SpringCamelContext - Apache Camel 2.18.1.redhat-000021 (CamelContext: camel) started in 1.368 seconds 14:35:57.675 [Camel (camel) thread #1 - timer://foo] INFO producer-route - Sent Message 1 14:35:57.842 [Camel (camel) thread #1 - timer://foo] INFO producer-route - Sent Message 2 14:35:57.854 [Camel (camel) thread #0 - JmsConsumer[my-queue]] INFO consumer-route - Message received >>> Message 1 14:35:57.886 [Camel (camel) thread #0 - JmsConsumer[my-queue]] INFO consumer-route - Message received >>> Message 2 14:35:57.890 [Camel (camel) thread #1 - timer://foo] INFO producer-route - Sent Message 3 14:35:57.928 [Camel (camel) thread #0 - JmsConsumer[my-queue]] INFO consumer-route - Message received >>> Message 3 14:35:57.940 [Camel (camel) thread #1 - timer://foo] INFO producer-route - Sent Message 4 14:35:57.971 [Camel (camel) thread #0 - JmsConsumer[my-queue]] INFO consumer-route - Message received >>> Message 4 14:35:57.992 [Camel (camel) thread #1 - timer://foo] INFO producer-route - Sent Message 5 14:35:58.024 [Camel (camel) thread #0 - JmsConsumer[my-queue]] INFO consumer-route - Message received >>> Message 5 14:35:58.044 [Camel (camel) thread #1 - timer://foo] INFO producer-route - Sent Message 6 14:35:58.080 [Camel (camel) thread #0 - JmsConsumer[my-queue]] INFO consumer-route - Message received >>> Message 6 14:35:58.096 [Camel (camel) thread #1 - timer://foo] INFO producer-route - Sent Message 7 14:35:58.130 [Camel (camel) thread #0 - JmsConsumer[my-queue]] INFO consumer-route - Message received >>> Message 7 14:35:58.147 [Camel (camel) thread #1 - timer://foo] INFO producer-route - Sent Message 8 14:35:58.179 [Camel (camel) thread #0 - JmsConsumer[my-queue]] INFO consumer-route - Message received >>> Message 8 14:35:58.198 [Camel (camel) thread #1 - timer://foo] INFO producer-route - Sent Message 9 14:35:58.230 [Camel (camel) thread #0 - JmsConsumer[my-queue]] INFO consumer-route - Message received >>> Message 9 14:35:58.247 [Camel (camel) thread #1 - timer://foo] INFO producer-route - Sent Message 10
You’re done! Press Ctrl+C to stop the running program.