2014-12-04 10:25:29 -05:00
|
|
|
Examples
|
|
|
|
========
|
|
|
|
|
|
|
|
The ActiveMQ distribution comes with over 70 run out-of-the-box examples
|
|
|
|
demonstrating many of the features.
|
|
|
|
|
|
|
|
The examples are available in the distribution, in the `examples`
|
|
|
|
directory. Examples are split into JMS and core examples. JMS examples
|
|
|
|
show how a particular feature can be used by a normal JMS client. Core
|
|
|
|
examples show how the equivalent feature can be used by a core messaging
|
|
|
|
client.
|
|
|
|
|
|
|
|
A set of Java EE examples are also provided which need WildFly installed
|
|
|
|
to be able to run.
|
|
|
|
|
|
|
|
JMS Examples
|
|
|
|
============
|
|
|
|
|
|
|
|
To run a JMS example, simply `cd` into the appropriate example directory
|
|
|
|
and type `mvn verify` (For details please read the readme.html in each
|
|
|
|
example directory).
|
|
|
|
|
|
|
|
Here's a listing of the examples with a brief description.
|
|
|
|
|
|
|
|
JMS AeroGear
|
|
|
|
------------
|
|
|
|
|
|
|
|
This example shows how you can send a message to a mobile device by
|
|
|
|
leveraging AeroGears push technology which provides support for
|
|
|
|
different push notification technologies like Google Cloud Messaging,
|
|
|
|
Apple's APNs or Mozilla's SimplePush.
|
|
|
|
|
|
|
|
Applet
|
|
|
|
------
|
|
|
|
|
|
|
|
This example shows you how to send and receive JMS messages from an
|
|
|
|
Applet.
|
|
|
|
|
|
|
|
Application-Layer Failover
|
|
|
|
--------------------------
|
|
|
|
|
|
|
|
ActiveMQ also supports Application-Layer failover, useful in the case
|
|
|
|
that replication is not enabled on the server side.
|
|
|
|
|
|
|
|
With Application-Layer failover, it's up to the application to register
|
|
|
|
a JMS `ExceptionListener` with ActiveMQ which will be called by ActiveMQ
|
|
|
|
in the event that connection failure is detected.
|
|
|
|
|
|
|
|
The code in the `ExceptionListener` then recreates the JMS connection,
|
|
|
|
session, etc on another node and the application can continue.
|
|
|
|
|
|
|
|
Application-layer failover is an alternative approach to High
|
|
|
|
Availability (HA). Application-layer failover differs from automatic
|
|
|
|
failover in that some client side coding is required in order to
|
|
|
|
implement this. Also, with Application-layer failover, since the old
|
|
|
|
session object dies and a new one is created, any uncommitted work in
|
|
|
|
the old session will be lost, and any unacknowledged messages might be
|
|
|
|
redelivered.
|
|
|
|
|
|
|
|
Core Bridge Example
|
|
|
|
-------------------
|
|
|
|
|
|
|
|
The `bridge` example demonstrates a core bridge deployed on one server,
|
|
|
|
which consumes messages from a local queue and forwards them to an
|
|
|
|
address on a second server.
|
|
|
|
|
|
|
|
Core bridges are used to create message flows between any two ActiveMQ
|
|
|
|
servers which are remotely separated. Core bridges are resilient and
|
|
|
|
will cope with temporary connection failure allowing them to be an ideal
|
|
|
|
choice for forwarding over unreliable connections, e.g. a WAN.
|
|
|
|
|
|
|
|
Browser
|
|
|
|
-------
|
|
|
|
|
|
|
|
The `browser` example shows you how to use a JMS `QueueBrowser` with
|
|
|
|
ActiveMQ.
|
|
|
|
|
|
|
|
Queues are a standard part of JMS, please consult the JMS 1.1
|
|
|
|
specification for full details.
|
|
|
|
|
|
|
|
A `QueueBrowser` is used to look at messages on the queue without
|
|
|
|
removing them. It can scan the entire content of a queue or only
|
|
|
|
messages matching a message selector.
|
|
|
|
|
|
|
|
Client Kickoff
|
|
|
|
--------------
|
|
|
|
|
|
|
|
The `client-kickoff` example shows how to terminate client connections
|
|
|
|
given an IP address using the JMX management API.
|
|
|
|
|
|
|
|
Client side failover listener
|
|
|
|
-----------------------------
|
|
|
|
|
|
|
|
The `client-side-failoverlistener` example shows how to register a
|
|
|
|
listener to monitor failover events
|
|
|
|
|
|
|
|
Client-Side Load-Balancing
|
|
|
|
--------------------------
|
|
|
|
|
|
|
|
The `client-side-load-balancing` example demonstrates how sessions
|
|
|
|
created from a single JMS `Connection` can be created to different nodes
|
|
|
|
of the cluster. In other words it demonstrates how ActiveMQ does
|
|
|
|
client-side load-balancing of sessions across the cluster.
|
|
|
|
|
|
|
|
Clustered Durable Subscription
|
|
|
|
------------------------------
|
|
|
|
|
|
|
|
This example demonstrates a clustered JMS durable subscription
|
|
|
|
|
|
|
|
Clustered Grouping
|
|
|
|
------------------
|
|
|
|
|
|
|
|
This is similar to the message grouping example except that it
|
|
|
|
demonstrates it working over a cluster. Messages sent to different nodes
|
|
|
|
with the same group id will be sent to the same node and the same
|
|
|
|
consumer.
|
|
|
|
|
|
|
|
Clustered Queue
|
|
|
|
---------------
|
|
|
|
|
|
|
|
The `clustered-queue` example demonstrates a JMS queue deployed on two
|
|
|
|
different nodes. The two nodes are configured to form a cluster. We then
|
|
|
|
create a consumer for the queue on each node, and we create a producer
|
|
|
|
on only one of the nodes. We then send some messages via the producer,
|
|
|
|
and we verify that both consumers receive the sent messages in a
|
|
|
|
round-robin fashion.
|
|
|
|
|
|
|
|
Clustering with JGroups
|
|
|
|
-----------------------
|
|
|
|
|
|
|
|
The `clustered-jgroups` example demonstrates how to form a two node
|
|
|
|
cluster using JGroups as its underlying topology discovery technique,
|
|
|
|
rather than the default UDP broadcasting. We then create a consumer for
|
|
|
|
the queue on each node, and we create a producer on only one of the
|
|
|
|
nodes. We then send some messages via the producer, and we verify that
|
|
|
|
both consumers receive the sent messages in a round-robin fashion.
|
|
|
|
|
|
|
|
Clustered Standalone
|
|
|
|
--------------------
|
|
|
|
|
|
|
|
The `clustered-standalone` example demonstrates how to configure and
|
|
|
|
starts 3 cluster nodes on the same machine to form a cluster. A
|
|
|
|
subscriber for a JMS topic is created on each node, and we create a
|
|
|
|
producer on only one of the nodes. We then send some messages via the
|
|
|
|
producer, and we verify that the 3 subscribers receive all the sent
|
|
|
|
messages.
|
|
|
|
|
|
|
|
Clustered Static Discovery
|
|
|
|
--------------------------
|
|
|
|
|
|
|
|
This example demonstrates how to configure a cluster using a list of
|
|
|
|
connectors rather than UDP for discovery
|
|
|
|
|
|
|
|
Clustered Static Cluster One Way
|
|
|
|
--------------------------------
|
|
|
|
|
|
|
|
This example demonstrates how to set up a cluster where cluster
|
|
|
|
connections are one way, i.e. server A -\> Server B -\> Server C
|
|
|
|
|
|
|
|
Clustered Topic
|
|
|
|
---------------
|
|
|
|
|
|
|
|
The `clustered-topic` example demonstrates a JMS topic deployed on two
|
|
|
|
different nodes. The two nodes are configured to form a cluster. We then
|
|
|
|
create a subscriber on the topic on each node, and we create a producer
|
|
|
|
on only one of the nodes. We then send some messages via the producer,
|
|
|
|
and we verify that both subscribers receive all the sent messages.
|
|
|
|
|
|
|
|
Message Consumer Rate Limiting
|
|
|
|
------------------------------
|
|
|
|
|
|
|
|
With ActiveMQ you can specify a maximum consume rate at which a JMS
|
|
|
|
MessageConsumer will consume messages. This can be specified when
|
|
|
|
creating or deploying the connection factory.
|
|
|
|
|
|
|
|
If this value is specified then ActiveMQ will ensure that messages are
|
|
|
|
never consumed at a rate higher than the specified rate. This is a form
|
|
|
|
of consumer throttling.
|
|
|
|
|
|
|
|
Dead Letter
|
|
|
|
-----------
|
|
|
|
|
|
|
|
The `dead-letter` example shows you how to define and deal with dead
|
|
|
|
letter messages. Messages can be delivered unsuccessfully (e.g. if the
|
|
|
|
transacted session used to consume them is rolled back).
|
|
|
|
|
|
|
|
Such a message goes back to the JMS destination ready to be redelivered.
|
|
|
|
However, this means it is possible for a message to be delivered again
|
|
|
|
and again without any success and remain in the destination, clogging
|
|
|
|
the system.
|
|
|
|
|
|
|
|
To prevent this, messaging systems define dead letter messages: after a
|
|
|
|
specified unsuccessful delivery attempts, the message is removed from
|
|
|
|
the destination and put instead in a dead letter destination where they
|
|
|
|
can be consumed for further investigation.
|
|
|
|
|
|
|
|
Delayed Redelivery
|
|
|
|
------------------
|
|
|
|
|
|
|
|
The `delayed-redelivery` example demonstrates how ActiveMQ can be
|
|
|
|
configured to provide a delayed redelivery in the case a message needs
|
|
|
|
to be redelivered.
|
|
|
|
|
|
|
|
Delaying redelivery can often be useful in the case that clients
|
|
|
|
regularly fail or roll-back. Without a delayed redelivery, the system
|
|
|
|
can get into a "thrashing" state, with delivery being attempted, the
|
|
|
|
client rolling back, and delivery being re-attempted in quick
|
|
|
|
succession, using up valuable CPU and network resources.
|
|
|
|
|
|
|
|
Divert
|
|
|
|
------
|
|
|
|
|
|
|
|
ActiveMQ diverts allow messages to be transparently "diverted" or copied
|
|
|
|
from one address to another with just some simple configuration defined
|
|
|
|
on the server side.
|
|
|
|
|
|
|
|
Durable Subscription
|
|
|
|
--------------------
|
|
|
|
|
|
|
|
The `durable-subscription` example shows you how to use a durable
|
|
|
|
subscription with ActiveMQ. Durable subscriptions are a standard part of
|
|
|
|
JMS, please consult the JMS 1.1 specification for full details.
|
|
|
|
|
|
|
|
Unlike non-durable subscriptions, the key function of durable
|
|
|
|
subscriptions is that the messages contained in them persist longer than
|
|
|
|
the lifetime of the subscriber - i.e. they will accumulate messages sent
|
|
|
|
to the topic even if there is no active subscriber on them. They will
|
|
|
|
also survive server restarts or crashes. Note that for the messages to
|
|
|
|
be persisted, the messages sent to them must be marked as durable
|
|
|
|
messages.
|
|
|
|
|
|
|
|
Embedded
|
|
|
|
--------
|
|
|
|
|
|
|
|
The `embedded` example shows how to embed JMS within your own code using
|
|
|
|
POJO instantiation and no config files.
|
|
|
|
|
|
|
|
Embedded Simple
|
|
|
|
---------------
|
|
|
|
|
|
|
|
The `embedded` example shows how to embed JMS within your own code using
|
|
|
|
regular ActiveMQ XML files.
|
|
|
|
|
|
|
|
Message Expiration
|
|
|
|
------------------
|
|
|
|
|
|
|
|
The `expiry` example shows you how to define and deal with message
|
|
|
|
expiration. Messages can be retained in the messaging system for a
|
|
|
|
limited period of time before being removed. JMS specification states
|
|
|
|
that clients should not receive messages that have been expired (but it
|
|
|
|
does not guarantee this will not happen).
|
|
|
|
|
|
|
|
ActiveMQ can assign an expiry address to a given queue so that when
|
|
|
|
messages are expired, they are removed from the queue and sent to the
|
|
|
|
expiry address. These "expired" messages can later be consumed from the
|
|
|
|
expiry address for further inspection.
|
|
|
|
|
|
|
|
ActiveMQ Resource Adapter example
|
|
|
|
---------------------------------
|
|
|
|
|
|
|
|
This examples shows how to build the activemq resource adapters a rar
|
|
|
|
for deployment in other Application Server's
|
|
|
|
|
|
|
|
HTTP Transport
|
|
|
|
--------------
|
|
|
|
|
|
|
|
The `http-transport` example shows you how to configure ActiveMQ to use
|
|
|
|
the HTTP protocol as its transport layer.
|
|
|
|
|
|
|
|
Instantiate JMS Objects Directly
|
|
|
|
--------------------------------
|
|
|
|
|
|
|
|
Usually, JMS Objects such as `ConnectionFactory`, `Queue` and `Topic`
|
|
|
|
instances are looked up from JNDI before being used by the client code.
|
|
|
|
This objects are called "administered objects" in JMS terminology.
|
|
|
|
|
|
|
|
However, in some cases a JNDI server may not be available or desired. To
|
|
|
|
come to the rescue ActiveMQ also supports the direct instantiation of
|
|
|
|
these administered objects on the client side so you don't have to use
|
|
|
|
JNDI for JMS.
|
|
|
|
|
|
|
|
Interceptor
|
|
|
|
-----------
|
|
|
|
|
|
|
|
ActiveMQ allows an application to use an interceptor to hook into the
|
|
|
|
messaging system. Interceptors allow you to handle various message
|
|
|
|
events in ActiveMQ.
|
|
|
|
|
|
|
|
JAAS
|
|
|
|
----
|
|
|
|
|
|
|
|
The `jaas` example shows you how to configure ActiveMQ to use JAAS for
|
|
|
|
security. ActiveMQ can leverage JAAS to delegate user authentication and
|
|
|
|
authorization to existing security infrastructure.
|
|
|
|
|
|
|
|
JMS Auto Closable
|
|
|
|
-----------------
|
|
|
|
|
|
|
|
The `jms-auto-closeable` example shows how JMS resources, such as
|
|
|
|
connections, sessions and consumers, in JMS 2 can be automatically
|
|
|
|
closed on error.
|
|
|
|
|
|
|
|
JMS Completion Listener
|
|
|
|
-----------------------
|
|
|
|
|
|
|
|
The `jms-completion-listener` example shows how to send a message
|
|
|
|
asynchronously to ActiveMQ and use a CompletionListener to be notified
|
|
|
|
of the Broker receiving it.
|
|
|
|
|
|
|
|
JMS Bridge
|
|
|
|
----------
|
|
|
|
|
|
|
|
The `jms-brige` example shows how to setup a bridge between two
|
|
|
|
standalone ActiveMQ servers.
|
|
|
|
|
|
|
|
JMS Context
|
|
|
|
-----------
|
|
|
|
|
|
|
|
The `jms-context` example shows how to send and receive a message to a
|
|
|
|
JMS Queue using ActiveMQ by using a JMS Context.
|
|
|
|
|
|
|
|
A JMSContext is part of JMS 2.0 and combines the JMS Connection and
|
|
|
|
Session Objects into a simple Interface.
|
|
|
|
|
|
|
|
JMS Shared Consumer
|
|
|
|
-------------------
|
|
|
|
|
|
|
|
The `jms-shared-consumer` example shows you how can use shared consumers
|
|
|
|
to share a subscription on a topic. In JMS 1.1 this was not allowed and
|
|
|
|
so caused a scalability issue. In JMS 2 this restriction has been lifted
|
|
|
|
so you can share the load across different threads and connections.
|
|
|
|
|
|
|
|
JMX Management
|
|
|
|
--------------
|
|
|
|
|
|
|
|
The `jmx` example shows how to manage ActiveMQ using JMX.
|
|
|
|
|
|
|
|
Large Message
|
|
|
|
-------------
|
|
|
|
|
|
|
|
The `large-message` example shows you how to send and receive very large
|
|
|
|
messages with ActiveMQ. ActiveMQ supports the sending and receiving of
|
|
|
|
huge messages, much larger than can fit in available RAM on the client
|
|
|
|
or server. Effectively the only limit to message size is the amount of
|
|
|
|
disk space you have on the server.
|
|
|
|
|
|
|
|
Large messages are persisted on the server so they can survive a server
|
|
|
|
restart. In other words ActiveMQ doesn't just do a simple socket stream
|
|
|
|
from the sender to the consumer.
|
|
|
|
|
|
|
|
Last-Value Queue
|
|
|
|
----------------
|
|
|
|
|
|
|
|
The `last-value-queue` example shows you how to define and deal with
|
|
|
|
last-value queues. Last-value queues are special queues which discard
|
|
|
|
any messages when a newer message with the same value for a well-defined
|
|
|
|
last-value property is put in the queue. In other words, a last-value
|
|
|
|
queue only retains the last value.
|
|
|
|
|
|
|
|
A typical example for last-value queue is for stock prices, where you
|
|
|
|
are only interested by the latest price for a particular stock.
|
|
|
|
|
|
|
|
Management
|
|
|
|
----------
|
|
|
|
|
|
|
|
The `management` example shows how to manage ActiveMQ using JMS Messages
|
|
|
|
to invoke management operations on the server.
|
|
|
|
|
|
|
|
Management Notification
|
|
|
|
-----------------------
|
|
|
|
|
|
|
|
The `management-notification` example shows how to receive management
|
|
|
|
notifications from ActiveMQ using JMS messages. ActiveMQ servers emit
|
|
|
|
management notifications when events of interest occur (consumers are
|
|
|
|
created or closed, addresses are created or deleted, security
|
|
|
|
authentication fails, etc.).
|
|
|
|
|
|
|
|
Message Counter
|
|
|
|
---------------
|
|
|
|
|
|
|
|
The `message-counters` example shows you how to use message counters to
|
|
|
|
obtain message information for a JMS queue.
|
|
|
|
|
|
|
|
Message Group
|
|
|
|
-------------
|
|
|
|
|
|
|
|
The `message-group` example shows you how to configure and use message
|
|
|
|
groups with ActiveMQ. Message groups allow you to pin messages so they
|
|
|
|
are only consumed by a single consumer. Message groups are sets of
|
|
|
|
messages that has the following characteristics:
|
|
|
|
|
|
|
|
- Messages in a message group share the same group id, i.e. they have
|
|
|
|
same JMSXGroupID string property values
|
|
|
|
|
|
|
|
- The consumer that receives the first message of a group will receive
|
|
|
|
all the messages that belongs to the group
|
|
|
|
|
|
|
|
Message Group
|
|
|
|
-------------
|
|
|
|
|
|
|
|
The `message-group2` example shows you how to configure and use message
|
|
|
|
groups with ActiveMQ via a connection factory.
|
|
|
|
|
|
|
|
Message Priority
|
|
|
|
----------------
|
|
|
|
|
|
|
|
Message Priority can be used to influence the delivery order for
|
|
|
|
messages.
|
|
|
|
|
|
|
|
It can be retrieved by the message's standard header field 'JMSPriority'
|
|
|
|
as defined in JMS specification version 1.1.
|
|
|
|
|
|
|
|
The value is of type integer, ranging from 0 (the lowest) to 9 (the
|
|
|
|
highest). When messages are being delivered, their priorities will
|
|
|
|
effect their order of delivery. Messages of higher priorities will
|
|
|
|
likely be delivered before those of lower priorities.
|
|
|
|
|
|
|
|
Messages of equal priorities are delivered in the natural order of their
|
|
|
|
arrival at their destinations. Please consult the JMS 1.1 specification
|
|
|
|
for full details.
|
|
|
|
|
|
|
|
Multiple Failover
|
|
|
|
-----------------
|
|
|
|
|
|
|
|
This example demonstrates how to set up a live server with multiple
|
|
|
|
backups
|
|
|
|
|
|
|
|
Multiple Failover Failback
|
|
|
|
--------------------------
|
|
|
|
|
|
|
|
This example demonstrates how to set up a live server with multiple
|
|
|
|
backups but forcing failover back to the original live server
|
|
|
|
|
|
|
|
No Consumer Buffering
|
|
|
|
---------------------
|
|
|
|
|
|
|
|
By default, ActiveMQ consumers buffer messages from the server in a
|
|
|
|
client side buffer before you actually receive them on the client side.
|
|
|
|
This improves performance since otherwise every time you called
|
|
|
|
receive() or had processed the last message in a
|
|
|
|
`MessageListener onMessage()` method, the ActiveMQ client would have to
|
|
|
|
go the server to request the next message, which would then get sent to
|
|
|
|
the client side, if one was available.
|
|
|
|
|
|
|
|
This would involve a network round trip for every message and reduce
|
|
|
|
performance. Therefore, by default, ActiveMQ pre-fetches messages into a
|
|
|
|
buffer on each consumer.
|
|
|
|
|
|
|
|
In some case buffering is not desirable, and ActiveMQ allows it to be
|
|
|
|
switched off. This example demonstrates that.
|
|
|
|
|
|
|
|
Non-Transaction Failover With Server Data Replication
|
|
|
|
-----------------------------------------------------
|
|
|
|
|
|
|
|
The `non-transaction-failover` example demonstrates two servers coupled
|
|
|
|
as a live-backup pair for high availability (HA), and a client using a
|
|
|
|
*non-transacted* JMS session failing over from live to backup when the
|
|
|
|
live server is crashed.
|
|
|
|
|
|
|
|
ActiveMQ implements failover of client connections between live and
|
|
|
|
backup servers. This is implemented by the replication of state between
|
|
|
|
live and backup nodes. When replication is configured and a live node
|
|
|
|
crashes, the client connections can carry and continue to send and
|
|
|
|
consume messages. When non-transacted sessions are used, once and only
|
|
|
|
once message delivery is not guaranteed and it is possible that some
|
|
|
|
messages will be lost or delivered twice.
|
|
|
|
|
|
|
|
OpenWire
|
|
|
|
--------
|
|
|
|
|
|
|
|
The `Openwire` example shows how to configure a ActiveMQ server to
|
|
|
|
communicate with an ActiveMQ JMS client that uses open-wire protocol.
|
|
|
|
|
|
|
|
Paging
|
|
|
|
------
|
|
|
|
|
|
|
|
The `paging` example shows how ActiveMQ can support huge queues even
|
|
|
|
when the server is running in limited RAM. It does this by transparently
|
|
|
|
*paging* messages to disk, and *depaging* them when they are required.
|
|
|
|
|
|
|
|
Pre-Acknowledge
|
|
|
|
---------------
|
|
|
|
|
|
|
|
Standard JMS supports three acknowledgement modes:`
|
|
|
|
AUTO_ACKNOWLEDGE`, `CLIENT_ACKNOWLEDGE`, and
|
|
|
|
`DUPS_OK_ACKNOWLEDGE`. For a full description on these modes please
|
|
|
|
consult the JMS specification, or any JMS tutorial.
|
|
|
|
|
|
|
|
All of these standard modes involve sending acknowledgements from the
|
|
|
|
client to the server. However in some cases, you really don't mind
|
|
|
|
losing messages in event of failure, so it would make sense to
|
|
|
|
acknowledge the message on the server before delivering it to the
|
|
|
|
client. This example demonstrates how ActiveMQ allows this with an extra
|
|
|
|
acknowledgement mode.
|
|
|
|
|
|
|
|
Message Producer Rate Limiting
|
|
|
|
------------------------------
|
|
|
|
|
|
|
|
The `producer-rte-limit` example demonstrates how, with ActiveMQ, you
|
|
|
|
can specify a maximum send rate at which a JMS message producer will
|
|
|
|
send messages.
|
|
|
|
|
|
|
|
Proton Qpid
|
|
|
|
-----------
|
|
|
|
|
|
|
|
ActiveMQ can be configured to accept requests from any AMQP client that
|
|
|
|
supports the 1.0 version of the protocol. This `proton-j` example shows
|
|
|
|
a simply qpid java 1.0 client example.
|
|
|
|
|
|
|
|
Proton Ruby
|
|
|
|
-----------
|
|
|
|
|
|
|
|
ActiveMQ can be configured to accept requests from any AMQP client that
|
|
|
|
supports the 1.0 version of the protocol. This example shows a simply
|
|
|
|
proton ruby client that sends and receives messages
|
|
|
|
|
|
|
|
Queue
|
|
|
|
-----
|
|
|
|
|
|
|
|
A simple example demonstrating a JMS queue.
|
|
|
|
|
|
|
|
Message Redistribution
|
|
|
|
----------------------
|
|
|
|
|
|
|
|
The `queue-message-redistribution` example demonstrates message
|
|
|
|
redistribution between queues with the same name deployed in different
|
|
|
|
nodes of a cluster.
|
|
|
|
|
|
|
|
Queue Requestor
|
|
|
|
---------------
|
|
|
|
|
|
|
|
A simple example demonstrating a JMS queue requestor.
|
|
|
|
|
|
|
|
Queue with Message Selector
|
|
|
|
---------------------------
|
|
|
|
|
|
|
|
The `queue-selector` example shows you how to selectively consume
|
|
|
|
messages using message selectors with queue consumers.
|
|
|
|
|
|
|
|
Reattach Node example
|
|
|
|
---------------------
|
|
|
|
|
|
|
|
The `Reattach Node` example shows how a client can try to reconnect to
|
|
|
|
the same server instead of failing the connection immediately and
|
|
|
|
notifying any user ExceptionListener objects. ActiveMQ can be configured
|
|
|
|
to automatically retry the connection, and reattach to the server when
|
|
|
|
it becomes available again across the network.
|
|
|
|
|
|
|
|
Replicated Failback example
|
|
|
|
---------------------------
|
|
|
|
|
|
|
|
An example showing how failback works when using replication, In this
|
|
|
|
example a live server will replicate all its Journal to a backup server
|
|
|
|
as it updates it. When the live server crashes the backup takes over
|
|
|
|
from the live server and the client reconnects and carries on from where
|
|
|
|
it left off.
|
|
|
|
|
|
|
|
Replicated Failback static example
|
|
|
|
----------------------------------
|
|
|
|
|
|
|
|
An example showing how failback works when using replication, but this
|
|
|
|
time with static connectors
|
|
|
|
|
|
|
|
Replicated multiple failover example
|
|
|
|
------------------------------------
|
|
|
|
|
|
|
|
An example showing how to configure multiple backups when using
|
|
|
|
replication
|
|
|
|
|
|
|
|
Replicated Failover transaction example
|
|
|
|
---------------------------------------
|
|
|
|
|
|
|
|
An example showing how failover works with a transaction when using
|
|
|
|
replication
|
|
|
|
|
|
|
|
Request-Reply example
|
|
|
|
---------------------
|
|
|
|
|
|
|
|
A simple example showing the JMS request-response pattern.
|
|
|
|
|
|
|
|
Rest example
|
|
|
|
------------
|
|
|
|
|
|
|
|
An example showing how to use the ActiveMQ Rest API
|
|
|
|
|
|
|
|
Scheduled Message
|
|
|
|
-----------------
|
|
|
|
|
|
|
|
The `scheduled-message` example shows you how to send a scheduled
|
|
|
|
message to a JMS Queue with ActiveMQ. Scheduled messages won't get
|
|
|
|
delivered until a specified time in the future.
|
|
|
|
|
|
|
|
Security
|
|
|
|
--------
|
|
|
|
|
|
|
|
The `security` example shows you how configure and use role based queue
|
|
|
|
security with ActiveMQ.
|
|
|
|
|
|
|
|
Send Acknowledgements
|
|
|
|
---------------------
|
|
|
|
|
|
|
|
The `send-acknowledgements` example shows you how to use ActiveMQ's
|
|
|
|
advanced *asynchronous send acknowledgements* feature to obtain
|
|
|
|
acknowledgement from the server that sends have been received and
|
|
|
|
processed in a separate stream to the sent messages.
|
|
|
|
|
|
|
|
Spring Integration
|
|
|
|
------------------
|
|
|
|
|
|
|
|
This example shows how to use embedded JMS using ActiveMQ's Spring
|
|
|
|
integration.
|
|
|
|
|
|
|
|
SSL Transport
|
|
|
|
-------------
|
|
|
|
|
|
|
|
The `ssl-enabled` shows you how to configure SSL with ActiveMQ to send
|
|
|
|
and receive message.
|
|
|
|
|
|
|
|
Static Message Selector
|
|
|
|
-----------------------
|
|
|
|
|
|
|
|
The `static-selector` example shows you how to configure a ActiveMQ core
|
|
|
|
queue with static message selectors (filters).
|
|
|
|
|
|
|
|
Static Message Selector Using JMS
|
|
|
|
---------------------------------
|
|
|
|
|
|
|
|
The `static-selector-jms` example shows you how to configure a ActiveMQ
|
|
|
|
queue with static message selectors (filters) using JMS.
|
|
|
|
|
|
|
|
Stomp
|
|
|
|
-----
|
|
|
|
|
|
|
|
The `stomp` example shows you how to configure a ActiveMQ server to send
|
|
|
|
and receive Stomp messages.
|
|
|
|
|
|
|
|
Stomp1.1
|
|
|
|
--------
|
|
|
|
|
|
|
|
The `stomp` example shows you how to configure a ActiveMQ server to send
|
|
|
|
and receive Stomp messages via a Stomp 1.1 connection.
|
|
|
|
|
|
|
|
Stomp1.2
|
|
|
|
--------
|
|
|
|
|
|
|
|
The `stomp` example shows you how to configure a ActiveMQ server to send
|
|
|
|
and receive Stomp messages via a Stomp 1.2 connection.
|
|
|
|
|
|
|
|
Stomp Over Web Sockets
|
|
|
|
----------------------
|
|
|
|
|
|
|
|
The `stomp-websockets` example shows you how to configure a ActiveMQ
|
|
|
|
server to send and receive Stomp messages directly from Web browsers
|
|
|
|
(provided they support Web Sockets).
|
|
|
|
|
|
|
|
Symmetric Cluster
|
|
|
|
-----------------
|
|
|
|
|
|
|
|
The `symmetric-cluster` example demonstrates a symmetric cluster set-up
|
|
|
|
with ActiveMQ.
|
|
|
|
|
|
|
|
ActiveMQ has extremely flexible clustering which allows you to set-up
|
|
|
|
servers in many different topologies. The most common topology that
|
|
|
|
you'll perhaps be familiar with if you are used to application server
|
|
|
|
clustering is a symmetric cluster.
|
|
|
|
|
|
|
|
With a symmetric cluster, the cluster is homogeneous, i.e. each node is
|
|
|
|
configured the same as every other node, and every node is connected to
|
|
|
|
every other node in the cluster.
|
|
|
|
|
|
|
|
Temporary Queue
|
|
|
|
---------------
|
|
|
|
|
|
|
|
A simple example demonstrating how to use a JMS temporary queue.
|
|
|
|
|
|
|
|
Topic
|
|
|
|
-----
|
|
|
|
|
|
|
|
A simple example demonstrating a JMS topic.
|
|
|
|
|
|
|
|
Topic Hierarchy
|
|
|
|
---------------
|
|
|
|
|
|
|
|
ActiveMQ supports topic hierarchies. With a topic hierarchy you can
|
|
|
|
register a subscriber with a wild-card and that subscriber will receive
|
|
|
|
any messages sent to an address that matches the wild card.
|
|
|
|
|
|
|
|
Topic Selector 1
|
|
|
|
----------------
|
|
|
|
|
|
|
|
The `topic-selector-example1` example shows you how to send message to a
|
|
|
|
JMS Topic, and subscribe them using selectors with ActiveMQ.
|
|
|
|
|
|
|
|
Topic Selector 2
|
|
|
|
----------------
|
|
|
|
|
|
|
|
The `topic-selector-example2` example shows you how to selectively
|
|
|
|
consume messages using message selectors with topic consumers.
|
|
|
|
|
|
|
|
Transaction Failover
|
|
|
|
--------------------
|
|
|
|
|
|
|
|
The `transaction-failover` example demonstrates two servers coupled as a
|
|
|
|
live-backup pair for high availability (HA), and a client using a
|
|
|
|
transacted JMS session failing over from live to backup when the live
|
|
|
|
server is crashed.
|
|
|
|
|
|
|
|
ActiveMQ implements failover of client connections between live and
|
|
|
|
backup servers. This is implemented by the sharing of a journal between
|
|
|
|
the servers. When a live node crashes, the client connections can carry
|
|
|
|
and continue to send and consume messages. When transacted sessions are
|
|
|
|
used, once and only once message delivery is guaranteed.
|
|
|
|
|
|
|
|
Failover Without Transactions
|
|
|
|
-----------------------------
|
|
|
|
|
|
|
|
The `stop-server-failover` example demonstrates failover of the JMS
|
|
|
|
connection from one node to another when the live server crashes using a
|
|
|
|
JMS non-transacted session.
|
|
|
|
|
|
|
|
Transactional Session
|
|
|
|
---------------------
|
|
|
|
|
|
|
|
The `transactional` example shows you how to use a transactional Session
|
|
|
|
with ActiveMQ.
|
|
|
|
|
|
|
|
XA Heuristic
|
|
|
|
------------
|
|
|
|
|
|
|
|
The `xa-heuristic` example shows you how to make an XA heuristic
|
|
|
|
decision through ActiveMQ Management Interface. A heuristic decision is
|
|
|
|
a unilateral decision to commit or rollback an XA transaction branch
|
|
|
|
after it has been prepared.
|
|
|
|
|
|
|
|
XA Receive
|
|
|
|
----------
|
|
|
|
|
|
|
|
The `xa-receive` example shows you how message receiving behaves in an
|
|
|
|
XA transaction in ActiveMQ.
|
|
|
|
|
|
|
|
XA Send
|
|
|
|
-------
|
|
|
|
|
|
|
|
The `xa-send` example shows you how message sending behaves in an XA
|
|
|
|
transaction in ActiveMQ.
|
|
|
|
|
|
|
|
XA with Transaction Manager
|
|
|
|
---------------------------
|
|
|
|
|
|
|
|
The `xa-with-jta` example shows you how to use JTA interfaces to control
|
|
|
|
transactions with ActiveMQ.
|
|
|
|
|
|
|
|
Core API Examples
|
|
|
|
=================
|
|
|
|
|
|
|
|
To run a core example, simply `cd` into the appropriate example
|
|
|
|
directory and type `ant`
|
|
|
|
|
|
|
|
Embedded
|
|
|
|
--------
|
|
|
|
|
|
|
|
The `embedded` example shows how to embed the ActiveMQ server within
|
2014-12-16 05:27:08 -05:00
|
|
|
your own code.
|