Hi Alexander, 

Thank you so much for sharing the insights you have garnered while working with 
Artemis. Truly appreciated!

When I first went through the documentation, I was looking for something 
similar to the likes of Intercommunication, MQSC command reference etc. in 
MQSeries. I was surprise to find no direct way of creating communication 
channels between brokers in the Web GUI. Even manually creating queues 
available in ActiveMQ classic is absent in Artemis. That's why I feel somehow 
lost on the way to get started. 

You're right. I just have to gnaw through the documentation to reach a point 
when things become clear by themselves - just as I did with MQSeries decades 
earlier.

Regards,
Ben

-----Original Message-----
From: Alexander Milovidov <milovid...@gmail.com> 
Sent: Sunday, February 25, 2024 4:56 PM
To: users@activemq.apache.org
Subject: Re: Have Artemis installed, Need advice where to start and how to 
start using it ... from IBM MQ world

Hi Ben,

I also worked with IBM MQ for several years. I have started with Artemis from 
reading the documentation, and continue to check it when something is not clear 
for me.
I think it is also necessary to have some real use cases for Artemis because it 
is not possible to gain a lot of experience using only test labs.

I'm not sure that I completely understood the question, but I would like to 
share my experience which is based on using both products (IBM MQ and ActiveMQ 
Artemis).

There are some things which are common for "classic" message brokers like IBM 
MQ, ActiveMQ Classic and Artemis, other things are different. For example, 
messages can be durable (persistent) or non-durable. Messages in the queues are 
consumed and removed from the queue when it is acknowledged by the client as 
delivered.
The main difference is in the address model of ActiveMQ Artemis. Queue in IBM 
MQ is like anycast address in Artemis with anycast queue. Topic in IBM MQ is 
like a multicast address with queues which are also subscriptions.
There are no separate objects like subscription and queue to which the 
subscription delivers its messages.
It is possible to make the subscriptions like in IBM MQ - we have experimented 
creating multicast addresses with diverts (rules to move messages from "topic 
address" to other addresses with anycast queues), and it works. In this case, 
divert looks like a subscription in IBM MQ. It also allows different address 
settings for different consumers.
Subscription or divert can use a filter (like selector in IBM MQ). Divert can 
be used in some other cases, for example like an alias queue in IBM MQ, and it 
can copy or move messages.
There are some other queue types which have no analog in IBM MQ, for example 
ring queues, last-value queues.

When we tried to use our standard naming for queues (for example, words 
separated with dots), we have experienced problems because "." is a reserved 
symbol in the subscription name (it is also a queue name) - it is used as a 
separator between client id and subscription and this problem occurs only when 
using Artemis Core libraries.
One address can be used for anycast and multicast, and it is a real mess.
Clients can auto-create queues with incorrect routing type (if it is permitted 
to create queues), after some release the name changes, and unused queues are 
piled up with messages. Some clients can read multicast queue using 
fully-qualified queue name like "address::queue", other clients cannot, and I 
don't have enough knowledge to understand the difference.

About clusters. Cluster with multiple active nodes in Artemis works like 
load-balancing cluster in IBM MQ, but it has a redistribution mechanism which 
moves messages to the node where the consumer is connected. But it adds some 
overhead to move messages between nodes.
When a client connects to one broker instance, it receives cluster topology 
information and can connect to any live node of the cluster. Sometimes it is 
necessary to turn off using topology for client-side load balancing, for 
example if client needs to connect to another port with SSL.

Remote queues and sender/receiver channels in IBM MQ: it is possible to create 
core bridges between two Artemis servers or clusters to send messages from one 
message broker to another.

There are many things which it is easier to configure in Artemis, and other 
things which can cause problems. For example, Artemis has an audit logging 
which can log all messages passed through message broker, and it works 
out-of-box. Messages are logged with all headers and without payload.
There are also a lot of built-in metrics which can be gathered using 
Prometheus. It is easier to configure high availability and resilience in 
Artemis because it has several HA mechanisms. I have used primary/backup with 
replication. It was easy to configure LDAP authentication and authorization 
using groups.
There are some problems with the management web console. Permissions for the 
management console are configured separately from permissions on the broker 
like in two different applications, and there is no way to reload 
management.xml without restarting the broker. But if someone wants to send a 
message using management console, it checks if user has send permissions on the 
broker (not only in the management console).
And there is no application like IBM MQ Explorer for Artemis. It is possible to 
use JMSToolBox only for some scenarios like sending test messages, listing and 
browsing queues.

After some experience with Artemis I mentioned that IBM MQ is more stable and 
more tolerant to the situations when large number of messages are left in the 
queues. Maybe we have to tune up journal and paging settings in Artemis. Also 
we did not find a way to restrict the number of messages in the particular 
queue.

It is not necessary to have Java programming skills, but IMHO it is better to 
have at least an experience of running Java application servers.
Sometimes in the open-source world something does not work as expected, it is 
where Java developer skills can be very useful. Maybe source code is the best 
documentation (at least it is always up to date).



вс, 25 февр. 2024 г. в 20:03, Ben F. Zhou <bfz...@hotmail.com>:

> Greetings, ...
>
> I'm trying to learn ActiveMQ, have installed and setup Artemis in my 
> home lab, created multiple broker instances on several Linux severs, 
> and could access the broker instances from the Web GUI. I do 
> understand the core architecture. But I'm still lost in finding a way 
> to understand how to use the brokers, like putting messages to queues 
> and get the them flow through a network of broken instance.
>
> Since I couldn't find a single internet post over the puzzle I'm stuck 
> with, I guess my problem has to be a matter of mind-set. I have worked 
> with IBM MQ for over two decades, and things there seem too natural 
> for me, like setting up a network of interconnected queue managers, 
> channels, local/remote queues, clusters etc. But where should I start with 
> ActiveMQ?
> Do I have to be a Java programmer to use ActiveMQ? I also tried to 
> find an ActiveMQ administration training course on Udemy, but could find 
> nothing.
>
> Thanks much for any advice!
> Ben
>
>

--
С уважением,
Александр Миловидов

Reply via email to