You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by cl...@apache.org on 2014/12/12 17:32:49 UTC
[2/5] activemq-6 git commit: documentation review fixes
http://git-wip-us.apache.org/repos/asf/activemq-6/blob/b4144013/docs/user-manual/en/management.md
----------------------------------------------------------------------
diff --git a/docs/user-manual/en/management.md b/docs/user-manual/en/management.md
index 5c37827..3969514 100644
--- a/docs/user-manual/en/management.md
+++ b/docs/user-manual/en/management.md
@@ -1,5 +1,4 @@
-Management
-==========
+# Management
ActiveMQ has an extensive management API that allows a user to modify a
server configuration, create new resources (e.g. JMS queues and topics),
@@ -26,8 +25,7 @@ JMS messages.
This choice depends on your requirements, your application settings and
your environment to decide which way suits you best.
-The Management API
-==================
+## The Management API
Regardless of the way you *invoke* management operations, the management
API is the same.
@@ -53,13 +51,12 @@ messages, or JMS messages are used.
> empty string means that the management operation will be performed on
> *all messages*.
-Core Management API
--------------------
+### Core Management API
ActiveMQ defines a core management API to manage core resources. For
full details of the API please consult the javadoc. In summary:
-### Core Server Management
+#### Core Server Management
- Listing, creating, deploying and destroying queues
@@ -145,7 +142,7 @@ full details of the API please consult the javadoc. In summary:
> receive some sort of error depending on which management service
> you use to call it.
-### Core Address Management
+#### Core Address Management
Core addresses can be managed using the `AddressControl` class (with the
ObjectName `org.apache.activemq:module=Core,type=Address,name="<the
@@ -159,7 +156,7 @@ ObjectName `org.apache.activemq:module=Core,type=Address,name="<the
`addRole()` or `removeRole()` methods. You can list all the roles
associated to the queue with the `getRoles()` method
-### Core Queue Management
+#### Core Queue Management
The bulk of the core management API deals with core queues. The
`QueueControl` class defines the Core queue management operations (with
@@ -219,8 +216,8 @@ messages with a given property.)
Message counters can be listed for a queue with the
`listMessageCounter()` and `listMessageCounterHistory()` methods
- (see ?). The message counters can also be reset for a single queue
- using the `resetMessageCounter()` method.
+ (see Message Counters section). The message counters can also be
+ reset for a single queue using the `resetMessageCounter()` method.
- Retrieving the queue attributes
@@ -236,7 +233,7 @@ messages with a given property.)
When it's resume, it'll begin delivering the queued messages, if
any.
-### Other Core Resources Management
+#### Other Core Resources Management
ActiveMQ allows to start and stop its remote resources (acceptors,
diverts, bridges, etc.) so that a server can be taken off line for a
@@ -252,7 +249,7 @@ transactions). These resources are:
name>"` or the resource name
`core.acceptor.<the
address name>`). The acceptors parameters
- can be retrieved using the `AcceptorControl` attributes (see ?)
+ can be retrieved using the `AcceptorControl` attributes (see [Understanding Acceptors](configuring-transports.md))
- Diverts
@@ -261,7 +258,7 @@ transactions). These resources are:
`org.apache.activemq:module=Core,type=Divert,name=<the divert name>`
or the resource name `core.divert.<the divert name>`). Diverts
parameters can be retrieved using the `DivertControl` attributes
- (see ?)
+ (see [Diverting and Splitting Message Flows)](diverts.md))
- Bridges
@@ -271,7 +268,7 @@ transactions). These resources are:
name>"` or the resource name
`core.bridge.<the bridge
name>`). Bridges parameters can be retrieved
- using the `BridgeControl` attributes (see ?)
+ using the `BridgeControl` attributes (see [Core bridges](core-bridges.md))
- Broadcast groups
@@ -281,7 +278,7 @@ transactions). These resources are:
name>"` or the resource name
`core.broadcastgroup.<the broadcast group name>`). Broadcast groups
parameters can be retrieved using the `BroadcastGroupControl`
- attributes (see ?)
+ attributes (see [Clusters](clusters.md))
- Discovery groups
@@ -292,7 +289,7 @@ transactions). These resources are:
`core.discovery.<the
discovery group name>`). Discovery groups
parameters can be retrieved using the `DiscoveryGroupControl`
- attributes (see ?)
+ attributes (see [Clusters](clusters.md))
- Cluster connections
@@ -302,15 +299,14 @@ transactions). These resources are:
connection name>"` or the resource name
`core.clusterconnection.<the cluster connection name>`). Cluster
connections parameters can be retrieved using the
- `ClusterConnectionControl` attributes (see ?)
+ `ClusterConnectionControl` attributes (see [Clusters](clusters.md))
-JMS Management API
-------------------
+### JMS Management API
ActiveMQ defines a JMS Management API to manage JMS *administrated
objects* (i.e. JMS queues, topics and connection factories).
-### JMS Server Management
+#### JMS Server Management
JMS Resources (connection factories and destinations) can be created
using the `JMSServerControl` class (with the ObjectName
@@ -333,7 +329,8 @@ using the `JMSServerControl` class (with the ObjectName
curly braces. For example `{key=10}, {key=20}`. In that case, the
first `key` will be associated to the first transport configuration
and the second `key` will be associated to the second transport
- configuration (see ? for a list of the transport parameters)
+ configuration (see [Configuring Transports](configuring-transports.md)
+ for a list of the transport parameters)
- Listing, creating, destroying queues
@@ -364,7 +361,7 @@ using the `JMSServerControl` class (with the ObjectName
`listConnectionIDs()` and all the sessions for a given connection ID
can be listed using `listSessions()`.
-### JMS ConnectionFactory Management
+#### JMS ConnectionFactory Management
JMS Connection Factories can be managed using the
`ConnectionFactoryControl` class (with the ObjectName
@@ -382,7 +379,7 @@ JMS Connection Factories can be managed using the
from the connection factory will block or not when sending
non-durable messages, etc.)
-### JMS Queue Management
+#### JMS Queue Management
JMS queues can be managed using the `JMSQueueControl` class (with the
ObjectName `org.apache.activemq:module=JMS,type=Queue,name="<the queue
@@ -439,7 +436,7 @@ operations on a core queue.*
Message counters can be listed for a queue with the
`listMessageCounter()` and `listMessageCounterHistory()` methods
- (see ?)
+ (see Message Counters section)
- Retrieving the queue attributes
@@ -455,7 +452,7 @@ operations on a core queue.*
will not deliver them. When resumed again it will deliver the
enqueued messages, if any.
-### JMS Topic Management
+#### JMS Topic Management
JMS Topics can be managed using the `TopicControl` class (with the
ObjectName `org.apache.activemq:module=JMS,type=Topic,name="<the topic
@@ -484,8 +481,7 @@ ObjectName `org.apache.activemq:module=JMS,type=Topic,name="<the topic
message selector to know the number of messages matching the
selector)
-Using Management Via JMX
-========================
+## Using Management Via JMX
ActiveMQ can be managed using
[JMX](http://www.oracle.com/technetwork/java/javase/tech/javamanagement-140525.html).
@@ -510,8 +506,7 @@ Managing ActiveMQ using JMX is identical to management of any Java
Applications using JMX. It can be done by reflection or by creating
proxies of the MBeans.
-Configuring JMX
----------------
+### Configuring JMX
By default, JMX is enabled to manage ActiveMQ. It can be disabled by
setting `jmx-management-enabled` to `false` in
@@ -538,7 +533,7 @@ domain can be configured for each individual ActiveMQ server by setting
<!-- use a specific JMX domain for ActiveMQ MBeans -->
<jmx-domain>my.org.apache.activemq</jmx-domain>
-### MBeanServer configuration
+#### MBeanServer configuration
When ActiveMQ is run in standalone, it uses the Java Virtual Machine's
`Platform MBeanServer` to register its MBeans. This is configured in
@@ -559,14 +554,12 @@ own MBean Server so that it can be managed using AS 5's jmx-console:
factoryMethod="locateJBoss" />
</bean>
-Example
--------
+### Example
See ? for an example which shows how to use a remote connection to JMX
and MBean proxies to manage ActiveMQ.
-Using Management Via Core API
-=============================
+## Using Management Via Core API
The core management API in ActiveMQ is called by sending Core messages
to a special address, the *management address*.
@@ -615,14 +608,16 @@ operations using Core messages:
For example, to find out the number of messages in the core queue
`exampleQueue`:
- ClientSession session = ...
- ClientRequestor requestor = new ClientRequestor(session, "jms.queue.activemq.management");
- ClientMessage message = session.createMessage(false);
- ManagementHelper.putAttribute(message, "core.queue.exampleQueue", "messageCount");
- session.start();
- ClientMessage reply = requestor.request(m);
- int count = (Integer) ManagementHelper.getResult(reply);
- System.out.println("There are " + count + " messages in exampleQueue");
+``` java
+ClientSession session = ...
+ClientRequestor requestor = new ClientRequestor(session, "jms.queue.activemq.management");
+ClientMessage message = session.createMessage(false);
+ManagementHelper.putAttribute(message, "core.queue.exampleQueue", "messageCount");
+session.start();
+ClientMessage reply = requestor.request(m);
+int count = (Integer) ManagementHelper.getResult(reply);
+System.out.println("There are " + count + " messages in exampleQueue");
+```
Management operation name and parameters must conform to the Java
interfaces defined in the `management` packages.
@@ -633,8 +628,7 @@ straightforward (`core.queue.exampleQueue` for the Core Queue
`exampleQueue`, `jms.topic.exampleTopic` for the JMS Topic
`exampleTopic`, etc.).
-Configuring Core Management
----------------------------
+### Configuring Core Management
The management address to send management messages is configured in
`activemq-configuration.xml`:
@@ -655,8 +649,7 @@ configured in activemq-configuration.xml:
<permission type="manage" roles="admin" />
</security-setting>
-Using Management Via JMS
-========================
+## Using Management Via JMS
Using JMS messages to manage ActiveMQ is very similar to using core API.
@@ -688,32 +681,29 @@ API instead:
For example, to know the number of messages in the JMS queue
`exampleQueue`:
-
- Queue managementQueue = ActiveMQJMSClient.createQueue("activemq.management");
-
- QueueSession session = ...
- QueueRequestor requestor = new QueueRequestor(session, managementQueue);
- connection.start();
- Message message = session.createMessage();
- JMSManagementHelper.putAttribute(message, "jms.queue.exampleQueue", "messageCount");
- Message reply = requestor.request(message);
- int count = (Integer)JMSManagementHelper.getResult(reply);
- System.out.println("There are " + count + " messages in exampleQueue");
-
-Configuring JMS Management
---------------------------
+``` java
+Queue managementQueue = ActiveMQJMSClient.createQueue("activemq.management");
+
+QueueSession session = ...
+QueueRequestor requestor = new QueueRequestor(session, managementQueue);
+connection.start();
+Message message = session.createMessage();
+JMSManagementHelper.putAttribute(message, "jms.queue.exampleQueue", "messageCount");
+Message reply = requestor.request(message);
+int count = (Integer)JMSManagementHelper.getResult(reply);
+System.out.println("There are " + count + " messages in exampleQueue");
+```
+### Configuring JMS Management
Whether JMS or the core API is used for management, the configuration
-steps are the same (see ?).
+steps are the same (see Configuring Core Management section).
-Example
--------
+### Example
See ? for an example which shows how to use JMS messages to manage
ActiveMQ server.
-Management Notifications
-========================
+## Management Notifications
ActiveMQ emits *notifications* to inform listeners of potentially
interesting events (creation of new resources, security violation,
@@ -727,10 +717,9 @@ These notifications can be received by 3 different ways:
- JMS messages
-JMX Notifications
------------------
+### JMX Notifications
-If JMX is enabled (see ?), JMX notifications can be received by
+If JMX is enabled (see Configuring JMX section), JMX notifications can be received by
subscribing to 2 MBeans:
- `org.apache.activemq:module=Core,type=Server` for notifications on
@@ -739,8 +728,7 @@ subscribing to 2 MBeans:
- `org.apache.activemq:module=JMS,type=Server` for notifications on
*JMS* resources
-Core Messages Notifications
----------------------------
+### Core Messages Notifications
ActiveMQ defines a special *management notification address*. Core
queues can be bound to this address so that clients will receive
@@ -758,7 +746,7 @@ Since notifications are regular core messages, it is possible to use
message selectors to filter out notifications and receives only a subset
of all the notifications emitted by the server.
-### Configuring The Core Management Notification Address
+#### Configuring The Core Management Notification Address
The management notification address to receive management notifications
is configured in `activemq-configuration.xml`:
@@ -767,8 +755,7 @@ is configured in `activemq-configuration.xml`:
By default, the address is `activemq.notifications`.
-JMS Messages Notifications
---------------------------
+### JMS Messages Notifications
ActiveMQ's notifications can also be received using JMS messages.
@@ -786,40 +773,39 @@ change the server's management notification address to start with
Once the notification topic is created, you can receive messages from it
or set a `MessageListener`:
- Topic notificationsTopic = ActiveMQJMSClient.createTopic("notificationsTopic");
-
- Session session = ...
- MessageConsumer notificationConsumer = session.createConsumer(notificationsTopic);
- notificationConsumer.setMessageListener(new MessageListener()
- {
- public void onMessage(Message notif)
- {
- System.out.println("------------------------");
- System.out.println("Received notification:");
- try
- {
- Enumeration propertyNames = notif.getPropertyNames();
- while (propertyNames.hasMoreElements())
- {
- String propertyName = (String)propertyNames.nextElement();
- System.out.format(" %s: %s\n", propertyName, notif.getObjectProperty(propertyName));
- }
- }
- catch (JMSException e)
- {
- }
- System.out.println("------------------------");
- }
- });
-
-Example
--------
+``` java
+Topic notificationsTopic = ActiveMQJMSClient.createTopic("notificationsTopic");
+
+Session session = ...
+MessageConsumer notificationConsumer = session.createConsumer(notificationsTopic);
+notificationConsumer.setMessageListener(new MessageListener()
+{
+ public void onMessage(Message notif)
+ {
+ System.out.println("------------------------");
+ System.out.println("Received notification:");
+ try
+ {
+ Enumeration propertyNames = notif.getPropertyNames();
+ while (propertyNames.hasMoreElements())
+ {
+ String propertyName = (String)propertyNames.nextElement();
+ System.out.format(" %s: %s\n", propertyName, notif.getObjectProperty(propertyName));
+ }
+ }
+ catch (JMSException e)
+ {
+ }
+ System.out.println("------------------------");
+ }
+});
+```
+### Example
See ? for an example which shows how to use a JMS `MessageListener` to
receive management notifications from ActiveMQ server.
-Notification Types and Headers
-------------------------------
+### Notification Types and Headers
Below is a list of all the different kinds of notifications as well as
which headers are on the messages. Every notification has a
@@ -914,8 +900,7 @@ header. The timestamp is the un-formatted result of a call to
`_HQ_Address`, `_HQ_ConsumerCount`, `_HQ_RemoteAddress`,
`_HQ_ConnectionName`, `_HQ_ConsumerName`, `_HQ_SessionName`
-Message Counters
-================
+## Message Counters
Message counters can be used to obtain information on queues *over time*
as ActiveMQ keeps a history on queue metrics.
@@ -966,8 +951,7 @@ For example, to know specifically how many messages were *consumed* from
the queue since the last update simply subtract the `messageCountDelta`
from `countDelta`.
-Configuring Message Counters
-----------------------------
+### Configuring Message Counters
By default, message counters are disabled as it might have a small
negative effect on memory.
@@ -991,28 +975,28 @@ configured to suit your messaging use case in
Message counters can be retrieved using the Management API. For example,
to retrieve message counters on a JMS Queue using JMX:
- // retrieve a connection to ActiveMQ's MBeanServer
- MBeanServerConnection mbsc = ...
- JMSQueueControlMBean queueControl = (JMSQueueControl)MBeanServerInvocationHandler.newProxyInstance(mbsc,
- on,
- JMSQueueControl.class,
- false);
- // message counters are retrieved as a JSON String
- String counters = queueControl.listMessageCounter();
- // use the MessageCounterInfo helper class to manipulate message counters more easily
- MessageCounterInfo messageCounter = MessageCounterInfo.fromJSON(counters);
- System.out.format("%s message(s) in the queue (since last sample: %s)\n",
- messageCounter.getMessageCount(),
- messageCounter.getMessageCountDelta());
-
-Example
--------
+``` java
+// retrieve a connection to ActiveMQ's MBeanServer
+MBeanServerConnection mbsc = ...
+JMSQueueControlMBean queueControl = (JMSQueueControl)MBeanServerInvocationHandler.newProxyInstance(mbsc,
+ on,
+ JMSQueueControl.class,
+ false);
+// message counters are retrieved as a JSON String
+String counters = queueControl.listMessageCounter();
+// use the MessageCounterInfo helper class to manipulate message counters more easily
+MessageCounterInfo messageCounter = MessageCounterInfo.fromJSON(counters);
+System.out.format("%s message(s) in the queue (since last sample: %s)\n",
+messageCounter.getMessageCount(),
+messageCounter.getMessageCountDelta());
+```
+
+### Example
See ? for an example which shows how to use message counters to retrieve
information on a JMS `Queue`.
-Administering ActiveMQ Resources Using The JBoss AS Admin Console
-=================================================================
+## Administering ActiveMQ Resources Using The JBoss AS Admin Console
Its possible to create and configure ActiveMQ resources via the admin
console within the JBoss Application Server.
@@ -1027,8 +1011,7 @@ Factories, clicking on each node will reveal which resources are
currently available. The following sections explain how to create and
configure each resource in turn.
-JMS Queues
-----------
+### JMS Queues
To create a new JMS Queue click on the JMS Queues item to reveal the
available queues. On the right hand panel you will see an add a new
@@ -1055,7 +1038,7 @@ configuration options, apart from security roles, relate to address
settings for a particular address. The default address settings are
picked up from the servers configuration, if you change any of these
settings or create a queue via the console a new Address Settings entry
-will be added. For a full explanation on Address Settings see ?
+will be added. For a full explanation on Address Settings see [Configuring Queues Via Address Settings](queue-attributes.md)
To delete a queue simply click on the delete button beside the queue
name in the main JMS Queues screen. This will also delete any address
@@ -1065,7 +1048,7 @@ The last part of the configuration options are security roles. If non
are provided on creation then the servers default security settings will
be shown. If these are changed or updated then new security settings are
created for the address of this queue. For more information on security
-setting see ?
+setting see [Security](security.md)
It is also possible via the metrics tab to view statistics for this
queue. This will show statistics such as message count, consumer count
@@ -1079,15 +1062,13 @@ you to a screen where you can parameters for the operation can be set.
Once set clicking the ok button will invoke the operation, results
appear at the bottom of the screen.
-JMS Topics
-----------
+### JMS Topics
Creating and configuring JMS Topics is almost identical to creating
queues. The only difference is that the configuration will be applied to
the queue representing a subscription.
-JMS Connection Factories
-------------------------
+### JMS Connection Factories
The format for creating connection factories is the same as for JMS
Queues and topics apart from the configuration being different. For as
http://git-wip-us.apache.org/repos/asf/activemq-6/blob/b4144013/docs/user-manual/en/message-expiry.md
----------------------------------------------------------------------
diff --git a/docs/user-manual/en/message-expiry.md b/docs/user-manual/en/message-expiry.md
index a42939c..3d75302 100644
--- a/docs/user-manual/en/message-expiry.md
+++ b/docs/user-manual/en/message-expiry.md
@@ -1,5 +1,4 @@
-Message Expiry
-==============
+# Message Expiry
Messages can be set with an optional *time to live* when sending them.
@@ -12,8 +11,7 @@ messages are expired, they are removed from the queue and sent to the
expiry address. Many different queues can be bound to an expiry address.
These *expired* messages can later be consumed for further inspection.
-Message Expiry
-==============
+## Message Expiry
Using ActiveMQ Core API, you can set an expiration time directly on the
message:
@@ -44,8 +42,7 @@ following properties:
a Long property containing the *actual expiration time* of the
expired message
-Configuring Expiry Addresses
-============================
+## Configuring Expiry Addresses
Expiry address are defined in the address-setting configuration:
@@ -56,10 +53,9 @@ Expiry address are defined in the address-setting configuration:
If messages are expired and no expiry address is specified, messages are
simply removed from the queue and dropped. Address wildcards can be used
-to configure expiry address for a set of addresses (see ?).
+to configure expiry address for a set of addresses (see [Understanding the HornetQ Wildcard Syntax](wildcard-syntax.md)).
-Configuring The Expiry Reaper Thread
-====================================
+## Configuring The Expiry Reaper Thread
A reaper thread will periodically inspect the queues to check if
messages have expired.
@@ -78,8 +74,7 @@ The reaper thread can be configured with the following properties in
The reaper thread priority (it must be between 0 and 9, 9 being the
highest priority, default is 3)
-Example
-=======
+## Example
See ? for an example which shows how message expiry is configured and
used with JMS.
http://git-wip-us.apache.org/repos/asf/activemq-6/blob/b4144013/docs/user-manual/en/message-grouping.md
----------------------------------------------------------------------
diff --git a/docs/user-manual/en/message-grouping.md b/docs/user-manual/en/message-grouping.md
index 2a0da9e..7b3d0bd 100644
--- a/docs/user-manual/en/message-grouping.md
+++ b/docs/user-manual/en/message-grouping.md
@@ -1,5 +1,4 @@
-Message Grouping
-================
+# Message Grouping
Message groups are sets of messages that have the following
characteristics:
@@ -21,7 +20,7 @@ An example might be orders for a certain stock. You may want orders for
any particular stock to be processed serially by the same consumer. To
do this you can create a pool of consumers (perhaps one for each stock,
but less will work too), then set the stock name as the value of the
-\_HQ\_GROUP\_ID property.
+_HQ_GROUP_ID property.
This will ensure that all messages for a particular stock will always be
processed by the same consumer.
@@ -41,16 +40,14 @@ processed by the same consumer.
> and consider whether or not you should isolate your grouped messages
> from your non-grouped messages.
-Using Core API
-==============
+## Using Core API
The property name used to identify the message group is `"_HQ_GROUP_ID"`
(or the constant `MessageImpl.HDR_GROUP_ID`). Alternatively, you can set
`autogroup` to true on the `SessionFactory` which will pick a random
unique id.
-Using JMS
-=========
+## Using JMS
The property name used to identify the message group is `JMSXGroupID`.
@@ -85,20 +82,17 @@ which is available in the context by default:
java.naming.provider.url=tcp://localhost:5445
connection.ConnectionFactory.groupID=Group-0
-Example
-=======
+## Example
See ? for an example which shows how message groups are configured and
used with JMS.
-Example
-=======
+## Example
See ? for an example which shows how message groups are configured via a
connection factory.
-Clustered Grouping
-==================
+## Clustered Grouping
Using message groups in a cluster is a bit more complex. This is because
messages with a particular group id can arrive on any node so each node
@@ -158,8 +152,7 @@ exception thrown. To avoid this happening Local Handlers can be
replicated on another backup node. Simple create your back up node and
configure it with the same Local handler.
-Clustered Grouping Best Practices
----------------------------------
+## Clustered Grouping Best Practices
Some best practices should be followed when using clustered grouping:
@@ -191,8 +184,7 @@ Some best practices should be followed when using clustered grouping:
last-time-use value should be updated with a round trip for a
request to the group between the nodes.
-Clustered Grouping Example
---------------------------
+## Clustered Grouping Example
See ? for an example of how to configure message groups with a ActiveMQ
cluster
http://git-wip-us.apache.org/repos/asf/activemq-6/blob/b4144013/docs/user-manual/en/messaging-concepts.md
----------------------------------------------------------------------
diff --git a/docs/user-manual/en/messaging-concepts.md b/docs/user-manual/en/messaging-concepts.md
index 284473b..f33d54e 100644
--- a/docs/user-manual/en/messaging-concepts.md
+++ b/docs/user-manual/en/messaging-concepts.md
@@ -1,5 +1,4 @@
-Messaging Concepts
-==================
+# Messaging Concepts
ActiveMQ is an asynchronous messaging system, an example of [Message
Oriented
@@ -13,8 +12,7 @@ about in the messaging world.
If you're already familiar with what a messaging system is and what it's
capable of, then you can skip this chapter.
-Messaging Concepts
-==================
+## Messaging Concepts
Messaging systems allow you to loosely couple heterogeneous systems
together, whilst typically providing reliability, transactions and many
@@ -51,8 +49,7 @@ grow and adapt more easily. It also allows more flexibility to add new
systems or retire old ones since they don't have brittle dependencies on
each other.
-Messaging styles
-================
+## Messaging styles
Messaging systems normally support two main styles of asynchronous
messaging: [message queue](http://en.wikipedia.org/wiki/Message_queue)
@@ -60,8 +57,7 @@ messaging (also known as *point-to-point messaging*) and [publish
subscribe](http://en.wikipedia.org/wiki/Publish_subscribe) messaging.
We'll summarise them briefly here:
-The Message Queue Pattern
--------------------------
+### The Message Queue Pattern
With this type of messaging you send a message to a queue. The message
is then typically persisted to provide a guarantee of delivery, then
@@ -101,8 +97,7 @@ forgotten about. Often the send to the warehouse system, update in
database and acknowledgement will be completed in a single transaction
to ensure [ACID](http://en.wikipedia.org/wiki/ACID) properties.
-The Publish-Subscribe Pattern
------------------------------
+### The Publish-Subscribe Pattern
With publish-subscribe messaging many senders can send messages to an
entity on the server, often called a *topic* (e.g. in the JMS world).
@@ -126,8 +121,7 @@ are interested in receiving news items - each one creates a subscription
and the messaging system ensures that a copy of each news message is
delivered to each subscription.
-Delivery guarantees
-===================
+## Delivery guarantees
A key feature of most messaging systems is *reliable messaging*. With
reliable messaging the server gives a guarantee that the message will be
@@ -143,16 +137,14 @@ which are quickly superseded by the next update on the same stock. The
messaging system allows you to configure which delivery guarantees you
require.
-Transactions
-============
+## Transactions
Messaging systems typically support the sending and acknowledgement of
multiple messages in a single local transaction. ActiveMQ also supports
the sending and acknowledgement of message as part of a large global
transaction - using the Java mapping of XA: JTA.
-Durability
-==========
+## Durability
Messages are either durable or non durable. Durable messages will be
persisted in permanent storage and will survive server failure or
@@ -162,8 +154,7 @@ they cannot be lost. An example of a non durable message might be a
stock price update which is transitory and doesn't need to survive a
restart.
-Messaging APIs and protocols
-============================
+## Messaging APIs and protocols
How do client applications interact with messaging systems in order to
send and consume messages?
@@ -176,8 +167,7 @@ and some emerging standards in this space.
Let's take a brief look at these:
-Java Message Service (JMS)
---------------------------
+### Java Message Service (JMS)
[JMS](http://en.wikipedia.org/wiki/Java_Message_Service) is part of
Sun's JEE specification. It's a Java API that encapsulates both message
@@ -196,8 +186,7 @@ internal wire protocol.
ActiveMQ provides a fully compliant JMS 1.1 and JMS 2.0 API.
-System specific APIs
---------------------
+### System specific APIs
Many systems provide their own programmatic API for which to interact
with the messaging system. The advantage of this it allows the full set
@@ -209,8 +198,7 @@ ActiveMQ provides its own core client API for clients to use if they
wish to have access to functionality over and above that accessible via
the JMS API.
-RESTful API
------------
+### RESTful API
[REST](http://en.wikipedia.org/wiki/Representational_State_Transfer)
approaches to messaging are showing a lot interest recently.
@@ -228,10 +216,9 @@ use HTTP as their underlying protocol.
The advantage of a REST approach with HTTP is in its simplicity and the
fact the internet is already tuned to deal with HTTP optimally.
-Please see ? for using ActiveMQ's RESTful interface.
+Please see [Rest Interface](rest.md) for using ActiveMQ's RESTful interface.
-STOMP
------
+### STOMP
[Stomp](http://stomp.github.io/) is a very simple text protocol for
interoperating with messaging systems. It defines a wire format, so
@@ -239,10 +226,9 @@ theoretically any Stomp client can work with any messaging system that
supports Stomp. Stomp clients are available in many different
programming languages.
-Please see ? for using STOMP with ActiveMQ.
+Please see [Stomp](interoperability.md) for using STOMP with ActiveMQ.
-AMQP
-----
+### AMQP
[AMQP](http://en.wikipedia.org/wiki/AMQP) is a specification for
interoperable messaging. It also defines a wire format, so any AMQP
@@ -254,8 +240,7 @@ ActiveMQ implements the [AMQP
specification. Any client that supports the 1.0 specification will be
able to interact with ActiveMQ.
-High Availability
-=================
+## High Availability
High Availability (HA) means that the system should remain operational
after failure of one or more of the servers. The degree of support for
@@ -265,10 +250,9 @@ ActiveMQ provides automatic failover where your sessions are
automatically reconnected to the backup server on event of live server
failure.
-For more information on HA, please see ?.
+For more information on HA, please see [High Availability and Failover](ha.md).
-Clusters
-========
+## Clusters
Many messaging systems allow you to create groups of messaging servers
called *clusters*. Clusters allow the load of sending and consuming
@@ -287,10 +271,9 @@ whether they are ready for messages.
ActiveMQ also has the ability to automatically redistribute messages
between nodes of a cluster to prevent starvation on any particular node.
-For full details on clustering, please see ?.
+For full details on clustering, please see [Clusters](clusters.md).
-Bridges and routing
-===================
+## Bridges and routing
Some messaging systems allow isolated clusters or single nodes to be
bridged together, typically over unreliable connections like a wide area
@@ -309,4 +292,4 @@ side configuration. This allows complex routing networks to be set up
forwarding or copying messages from one destination to another, forming
a global network of interconnected brokers.
-For more information please see ? and ?.
+For more information please see [Core Bridges](core-bridges.md) and [Diverting and Splitting Message Flows](diverts.md).
http://git-wip-us.apache.org/repos/asf/activemq-6/blob/b4144013/docs/user-manual/en/paging.md
----------------------------------------------------------------------
diff --git a/docs/user-manual/en/paging.md b/docs/user-manual/en/paging.md
index 392c9ae..491b09f 100644
--- a/docs/user-manual/en/paging.md
+++ b/docs/user-manual/en/paging.md
@@ -1,5 +1,4 @@
-Paging
-======
+# Paging
ActiveMQ transparently supports huge queues containing millions of
messages while the server is running with limited memory.
@@ -15,8 +14,7 @@ messages in memory for an address exceeds a configured maximum size.
By default, ActiveMQ does not page messages - this must be explicitly
configured to activate it.
-Page Files
-==========
+## Page Files
Messages are stored per address on the file system. Each address has an
individual folder where messages are stored in multiple files (page
@@ -30,8 +28,7 @@ Browsers will read through the page-cursor system.
Consumers with selectors will also navigate through the page-files and
it will ignore messages that don't match the criteria.
-Configuration
-=============
+## Configuration
You can configure the location of the paging folder
@@ -51,8 +48,7 @@ Global paging parameters are specified on the main configuration file
: Paging Configuration Parameters
-Paging Mode
-===========
+## Paging Mode
As soon as messages delivered to an address exceed the configured size,
that address alone goes into page mode.
@@ -65,8 +61,7 @@ that address alone goes into page mode.
> total overall size of all matching addresses is limited to
> max-size-bytes.
-Configuration
--------------
+## Configuration
Configuration is done at the address settings, done at the main
configuration file (`activemq-configuration.xml`).
@@ -90,8 +85,7 @@ This is the list of available parameters on the address settings.
: Paging Address Settings
-Dropping messages
-=================
+## Dropping messages
Instead of paging messages when the max size is reached, an address can
also be configured to just drop messages when the address is full.
@@ -99,8 +93,7 @@ also be configured to just drop messages when the address is full.
To do this just set the `address-full-policy` to `DROP` in the address
settings
-Dropping messages and throwing an exception to producers
-========================================================
+## Dropping messages and throwing an exception to producers
Instead of paging messages when the max size is reached, an address can
also be configured to drop messages and also throw an exception on the
@@ -109,8 +102,7 @@ client-side when the address is full.
To do this just set the `address-full-policy` to `FAIL` in the address
settings
-Blocking producers
-==================
+## Blocking producers
Instead of paging messages when the max size is reached, an address can
also be configured to block producers from sending further messages when
@@ -126,8 +118,7 @@ settings
In the default configuration, all addresses are configured to block
producers after 10 MiB of data are in the address.
-Caution with Addresses with Multiple Queues
-===========================================
+## Caution with Addresses with Multiple Queues
When a message is routed to an address that has multiple queues bound to
it, e.g. a JMS subscription in a Topic, there is only 1 copy of the
@@ -154,7 +145,6 @@ In this example all the other 9 queues will be consuming messages from
the page system. This may cause performance issues if this is an
undesirable state.
-Example
-=======
+## Example
See ? for an example which shows how to use paging with ActiveMQ.
http://git-wip-us.apache.org/repos/asf/activemq-6/blob/b4144013/docs/user-manual/en/perf-tuning.md
----------------------------------------------------------------------
diff --git a/docs/user-manual/en/perf-tuning.md b/docs/user-manual/en/perf-tuning.md
index f1410af..919f936 100644
--- a/docs/user-manual/en/perf-tuning.md
+++ b/docs/user-manual/en/perf-tuning.md
@@ -1,11 +1,9 @@
-Performance Tuning
-==================
+# Performance Tuning
In this chapter we'll discuss how to tune ActiveMQ for optimum
performance.
-Tuning persistence
-==================
+## Tuning persistence
- Put the message journal on its own physical volume. If the disk is
shared with other processes e.g. transaction co-ordinator, database
@@ -38,8 +36,7 @@ Tuning persistence
performance by increasing `journal-max-io`. DO NOT change this
parameter if you are running NIO.
-Tuning JMS
-==========
+## Tuning JMS
There are a few areas where some tweaks can be done if you are using the
JMS API
@@ -78,8 +75,7 @@ JMS API
ActiveMQ will only require a network round trip on the commit, not
on every send or acknowledgement.
-Other Tunings
-=============
+## Other Tunings
There are various other places in ActiveMQ where we can perform some
tuning:
@@ -89,12 +85,13 @@ tuning:
reached the server by the time the call to send() returns, don't set
durable messages to be sent blocking, instead use asynchronous send
acknowledgements to get your acknowledgements of send back in a
- separate stream, see ? for more information on this.
+ separate stream, see [Guarantees of sends and commits](send-guarantees.md)
+ for more information on this.
- Use pre-acknowledge mode. With pre-acknowledge mode, messages are
acknowledged `before` they are sent to the client. This reduces the
amount of acknowledgement traffic on the wire. For more information
- on this, see ?.
+ on this, see [Extra Acknowledge Modes](pre-acknowledge.md).
- Disable security. You may get a small performance boost by disabling
security by setting the `security-enabled` parameter to `false` in
@@ -107,20 +104,22 @@ tuning:
- Sync transactions lazily. Setting `journal-sync-transactional` to
`false` in `activemq-configuration.xml` can give you better
transactional persistent performance at the expense of some
- possibility of loss of transactions on failure. See ? for more
- information.
+ possibility of loss of transactions on failure. See [Guarantees of sends and commits](send-guarantees.md)
+ for more information.
- Sync non transactional lazily. Setting
`journal-sync-non-transactional` to `false` in
`activemq-configuration.xml` can give you better non-transactional
persistent performance at the expense of some possibility of loss of
- durable messages on failure. See ? for more information.
+ durable messages on failure. See [Guarantees of sends and commits](send-guarantees.md)
+ for more information.
- Send messages non blocking. Setting `block-on-durable-send` and
`block-on-non-durable-send` to `false` in `activemq-jms.xml` (if
you're using JMS and JNDI) or directly on the ServerLocator. This
means you don't have to wait a whole network round trip for every
- message sent. See ? for more information.
+ message sent. See [Guarantees of sends and commits](send-guarantees.md)
+ for more information.
- If you have very fast consumers, you can increase
consumer-window-size. This effectively disables consumer flow
@@ -128,7 +127,7 @@ tuning:
- Socket NIO vs Socket Old IO. By default ActiveMQ uses old (blocking)
on the server and the client side (see the chapter on configuring
- transports for more information ?). NIO is much more scalable but
+ transports for more information [Configuring the Transport](configuring-transports.md). NIO is much more scalable but
can give you some latency hit compared to old blocking IO. If you
need to be able to service many thousands of connections on the
server, then you should make sure you're using NIO on the server.
@@ -145,12 +144,12 @@ tuning:
the wire, so if you re-use `SimpleString` instances between calls
then you can avoid some unnecessary copying.
-Tuning Transport Settings
-=========================
+## Tuning Transport Settings
- TCP buffer sizes. If you have a fast network and fast machines you
may get a performance boost by increasing the TCP send and receive
- buffer sizes. See the ? for more information on this.
+ buffer sizes. See the [Configuring the Transport](configuring-transports.md)
+ for more information on this.
> **Note**
>
@@ -180,10 +179,10 @@ Tuning Transport Settings
`activemq-configuration.xml` and JMS connection factory
(`ThroughputConnectionFactory`) in `activemq-jms.xml`which can be
used to give the very best throughput, especially for small
- messages. See the ? for more information on this.
+ messages. See the [Configuring the Transport](configuring-transports.md)
+ for more information on this.
-Tuning the VM
-=============
+## Tuning the VM
We highly recommend you use the latest Java JVM for the best
performance. We test internally using the Sun JVM, so some of these
@@ -194,7 +193,7 @@ tunings won't apply to JDKs from other providers (e.g. IBM or JRockit)
`-XX:+UseParallelOldGC` on Sun JDKs.
- Memory settings. Give as much memory as you can to the server.
- ActiveMQ can run in low memory by using paging (described in ?) but
+ ActiveMQ can run in low memory by using paging (described in [Paging](paging.md)) but
if it can run with all queues in RAM this will improve performance.
The amount of memory you require will depend on the size and number
of your queues and the size and number of your messages. Use the JVM
@@ -210,8 +209,7 @@ tunings won't apply to JDKs from other providers (e.g. IBM or JRockit)
some mileage with the other tuning parameters depending on your OS
platform and application usage patterns.
-Avoiding Anti-Patterns
-======================
+## Avoiding Anti-Patterns
- Re-use connections / sessions / consumers / producers. Probably the
most common messaging anti-pattern we see is users who create a new
http://git-wip-us.apache.org/repos/asf/activemq-6/blob/b4144013/docs/user-manual/en/persistence.md
----------------------------------------------------------------------
diff --git a/docs/user-manual/en/persistence.md b/docs/user-manual/en/persistence.md
index e2c6f58..b02f968 100644
--- a/docs/user-manual/en/persistence.md
+++ b/docs/user-manual/en/persistence.md
@@ -1,5 +1,4 @@
-Persistence
-===========
+# Persistence
In this chapter we will describe how persistence works with ActiveMQ and
how to configure it.
@@ -63,14 +62,14 @@ implementations. ActiveMQ ships with two implementations:
The AIO journal is only available when running Linux kernel 2.6 or
later and after having installed libaio (if it's not already
- installed). For instructions on how to install libaio please see ?.
+ installed). For instructions on how to install libaio please see Installing AIO section.
Also, please note that AIO will only work with the following file
systems: ext2, ext3, ext4, jfs, xfs. With other file systems, e.g.
NFS it may appear to work, but it will fall back to a slower
synchronous behaviour. Don't put the journal on a NFS share!
- For more information on libaio please see ?.
+ For more information on libaio please see [lib AIO](libaio.md).
libaio is part of the kernel project.
@@ -118,16 +117,16 @@ The standard ActiveMQ core server uses two instances of the journal:
(configurable), and it is located at the journal folder.
For large messages, ActiveMQ persists them outside the message journal.
-This is discussed in ?.
+This is discussed in [Large Messages](large-messages.md).
ActiveMQ can also be configured to page messages to disk in low memory
-situations. This is discussed in ?.
+situations. This is discussed in [Paging](paging.md).
If no persistence is required at all, ActiveMQ can also be configured
-not to persist any data at all to storage as discussed in ?.
+not to persist any data at all to storage as discussed in the Configuring
+HornetQ for Zero Persistence section.
-Configuring the bindings journal
-================================
+## Configuring the bindings journal
The bindings journal is configured using the following attributes in
`activemq-configuration.xml`
@@ -144,13 +143,11 @@ The bindings journal is configured using the following attributes in
`bindings-directory` if it does not already exist. The default value
is `true`
-Configuring the jms journal
-===========================
+## Configuring the jms journal
The jms config shares its configuration with the bindings journal.
-Configuring the message journal
-===============================
+## Configuring the message journal
The message journal is configured using the following attributes in
`activemq-configuration.xml`
@@ -283,8 +280,7 @@ The message journal is configured using the following attributes in
The default for this parameter is `30`
-An important note on disabling disk write cache.
-================================================
+## An important note on disabling disk write cache.
> **Warning**
>
@@ -323,8 +319,7 @@ An important note on disabling disk write cache.
> On Windows you can check / change the setting by right clicking on the
> disk and clicking properties.
-Installing AIO
-==============
+## Installing AIO
The Java NIO journal gives great performance, but If you are running
ActiveMQ using Linux Kernel 2.6 or later, we highly recommend you use
@@ -344,8 +339,7 @@ Using aptitude, (e.g. on Ubuntu or Debian system):
apt-get install libaio
-Configuring ActiveMQ for Zero Persistence
-=========================================
+## Configuring ActiveMQ for Zero Persistence
In some situations, zero persistence is sometimes required for a
messaging system. Configuring ActiveMQ to perform zero persistence is
@@ -356,8 +350,7 @@ Please note that if you set this parameter to false, then *zero*
persistence will occur. That means no bindings data, message data, large
message data, duplicate id caches or paging data will be persisted.
-Import/Export the Journal Data
-==============================
+## Import/Export the Journal Data
You may want to inspect the existent records on each one of the journals
used by ActiveMQ, and you can use the export/import tool for that
@@ -379,13 +372,12 @@ require netty.jar):
folder. Example: ./activemq/data/journal
- JournalPrefix: Use the prefix for your selected journal, as
- discussed [here](#persistence.journallist)
+ discussed above
- FileExtension: Use the extension for your selected journal, as
- discussed [here](#persistence.journallist)
+ discussed above
-- FileSize: Use the size for your selected journal, as discussed
- [here](#persistence.journallist)
+- FileSize: Use the size for your selected journal, as discussed above
- FileOutput: text file that will contain the exported data
http://git-wip-us.apache.org/repos/asf/activemq-6/blob/b4144013/docs/user-manual/en/pre-acknowledge.md
----------------------------------------------------------------------
diff --git a/docs/user-manual/en/pre-acknowledge.md b/docs/user-manual/en/pre-acknowledge.md
index 1bec75e..4a78e70 100644
--- a/docs/user-manual/en/pre-acknowledge.md
+++ b/docs/user-manual/en/pre-acknowledge.md
@@ -1,5 +1,4 @@
-Extra Acknowledge Modes
-=======================
+# Extra Acknowledge Modes
JMS specifies 3 acknowledgement modes:
@@ -41,8 +40,7 @@ arrive soon, overriding the previous price.
> the transaction. This may be stating the obvious but we like to be
> clear on these things to avoid confusion!
-Using PRE\_ACKNOWLEDGE
-======================
+## Using PRE_ACKNOWLEDGE
This can be configured in a client's JNDI context environment, e.g.
`jndi.properties`, like this:
@@ -63,8 +61,7 @@ Or you can set pre-acknowledge directly on the
To use pre-acknowledgement mode using the core API you can set it
directly on the `ClientSessionFactory` instance using the setter method.
-Individual Acknowledge
-======================
+## Individual Acknowledge
A valid use-case for individual acknowledgement would be when you need
to have your own scheduling and you don't know when your message
@@ -85,8 +82,7 @@ the exception the message is individually acked.
> adapter). this is because you have to finish the process of your
> message inside the MDB.
-Example
-=======
+## Example
See ? for an example which shows how to use pre-acknowledgement mode
with JMS.
http://git-wip-us.apache.org/repos/asf/activemq-6/blob/b4144013/docs/user-manual/en/preface.md
----------------------------------------------------------------------
diff --git a/docs/user-manual/en/preface.md b/docs/user-manual/en/preface.md
index 8cc9717..27f4b9b 100644
--- a/docs/user-manual/en/preface.md
+++ b/docs/user-manual/en/preface.md
@@ -1,5 +1,4 @@
-Preface
-=======
+# Preface
What is ActiveMQ?
@@ -8,11 +7,11 @@ What is ActiveMQ?
system.
- ActiveMQ is an example of Message Oriented Middleware (MoM). For a
- description of MoMs and other messaging concepts please see the ?.
+ description of MoMs and other messaging concepts please see the [Messaging Concepts](messaging-concepts.md).
- For answers to more questions about what ActiveMQ is and what it
isn't please visit the [FAQs wiki
- page](http://www.jboss.org/community/wiki/ActiveMQGeneralFAQs).
+ page](todo).
Why use ActiveMQ? Here are just a few of the reasons:
@@ -47,6 +46,6 @@ Why use ActiveMQ? Here are just a few of the reasons:
routing of messages in a highly flexible way.
- For a full list of features, please see the [features wiki
- page](http://www.jboss.org/community/wiki/ActiveMQFeatures) .
+ page](todo) .
http://git-wip-us.apache.org/repos/asf/activemq-6/blob/b4144013/docs/user-manual/en/project-info.md
----------------------------------------------------------------------
diff --git a/docs/user-manual/en/project-info.md b/docs/user-manual/en/project-info.md
index 2465981..b6099ac 100644
--- a/docs/user-manual/en/project-info.md
+++ b/docs/user-manual/en/project-info.md
@@ -1,50 +1,30 @@
-Project Information
-===================
+# Project Information
-The official ActiveMQ project page is <http://activemq.org/>.
+The official ActiveMQ project page is <http://activemq.apache.org//>.
-Software Download
-=================
+## Software Download
The software can be download from the Download
-page:<http://activemq.org/downloads.html>
+page:<http://activemq.apache.org/download.html>
-Project Information
-===================
-
-- Please take a look at our project
- [wiki](http://www.jboss.org/community/wiki/ActiveMQ)
+## Project Information
- If you have any user questions please use our [user
- forum](https://community.jboss.org/en/activemq)
+ forum](http://activemq.2283324.n4.nabble.com/ActiveMQ-User-f2341805.html)
- If you have development related questions, please use our [developer
- forum](https://community.jboss.org/en/activemq/dev)
+ forum](http://activemq.2283324.n4.nabble.com/ActiveMQ-Dev-f2368404.html)
- Pop in and chat to us in our [IRC
channel](irc://irc.freenode.net:6667/activemq)
-- Our project [blog](http://activemq.blogspot.com/)
-
-- Follow us on [twitter](http://twitter.com/activemq)
+- Follow us on [twitter](https://twitter.com/activemq)
-- ActiveMQ Git repository is <https://github.com/activemq/activemq>
+- ActiveMQ Git repository is <https://github.com/apache/activemq-6>
- All release tags are available from
- <https://github.com/activemq/activemq/tags>
-
-Red Hat kindly employs developers to work full time on ActiveMQ, they
-are:
-
-- Clebert Suconic (project lead)
-
-- Andy Taylor
-
-- Howard Gao
+ <https://github.com/apache/activemq-6/releases>
-- Justin Bertram
And many thanks to all our contributors, both old and new who helped
-create ActiveMQ, for a full list of the people who made it happen, take
-a look at our [team
-page](http://jboss.org.apache.activemq/community/team.html).
+create ActiveMQ.
http://git-wip-us.apache.org/repos/asf/activemq-6/blob/b4144013/docs/user-manual/en/project-info.xml
----------------------------------------------------------------------
diff --git a/docs/user-manual/en/project-info.xml b/docs/user-manual/en/project-info.xml
deleted file mode 100644
index 51a7470..0000000
--- a/docs/user-manual/en/project-info.xml
+++ /dev/null
@@ -1,90 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- ============================================================================= -->
-<!-- Licensed to the Apache Software Foundation (ASF) under one or more -->
-<!-- contributor license agreements. See the NOTICE file distributed with -->
-<!-- this work for additional information regarding copyright ownership. -->
-<!-- The ASF licenses this file to You under the Apache License, Version 2.0 -->
-<!-- (the "License"); you may not use this file except in compliance with -->
-<!-- the License. You may obtain a copy of the License at -->
-<!-- -->
-<!-- http://www.apache.org/licenses/LICENSE-2.0 -->
-<!-- -->
-<!-- Unless required by applicable law or agreed to in writing, software -->
-<!-- distributed under the License is distributed on an "AS IS" BASIS, -->
-<!-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -->
-<!-- See the License for the specific language governing permissions and -->
-<!-- limitations under the License. -->
-<!-- ============================================================================= -->
-
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
-<!ENTITY % BOOK_ENTITIES SYSTEM "ActiveMQ_User_Manual.ent">
-%BOOK_ENTITIES;
-]>
-<chapter id="project-info">
- <title>Project Information</title>
- <para>The official ActiveMQ project page is <ulink url="http://activemq.org/"
- >http://activemq.org/</ulink>.</para>
- <section id="download.software">
- <title>Software Download</title>
- <para>The software can be download from the Download page:<ulink
- url="http://activemq.org/downloads.html">http://activemq.org/downloads.html</ulink></para>
- </section>
- <section id="download.git">
- <title>Project Information</title>
- <para>
- <itemizedlist>
- <listitem>
- <para>Please take a look at our project <ulink
- url="http://www.jboss.org/community/wiki/ActiveMQ">wiki</ulink></para>
- </listitem>
- <listitem>
- <para>If you have any user questions please use our <ulink
- url="https://community.jboss.org/en/activemq">user
- forum</ulink></para>
- </listitem>
- <listitem>
- <para>If you have development related questions, please use our <ulink
- url="https://community.jboss.org/en/activemq/dev"
- >developer forum</ulink></para>
- </listitem>
- <listitem>
- <para>Pop in and chat to us in our <ulink url="irc://irc.freenode.net:6667/activemq"
- >IRC channel</ulink></para>
- </listitem>
- <listitem>
- <para>Our project <ulink url="http://activemq.blogspot.com/">blog</ulink></para>
- </listitem>
- <listitem>
- <para>Follow us on <ulink url="http://twitter.com/activemq">twitter</ulink></para>
- </listitem>
- <listitem>
- <para>ActiveMQ Git repository is <ulink
- url="https://github.com/activemq/activemq"
- >https://github.com/activemq/activemq</ulink></para>
- </listitem>
- <listitem>
- <para>All release tags are available from <ulink
- url="https://github.com/activemq/activemq/tags"
- >https://github.com/activemq/activemq/tags</ulink></para>
- </listitem>
- </itemizedlist>
- </para>
- <para>Red Hat kindly employs developers to work full time on ActiveMQ, they are: <itemizedlist>
- <listitem>
- <para>Clebert Suconic (project lead)</para>
- </listitem>
- <listitem>
- <para>Andy Taylor</para>
- </listitem>
- <listitem>
- <para>Howard Gao</para>
- </listitem>
- <listitem>
- <para>Justin Bertram</para>
- </listitem>
- </itemizedlist></para>
- <para> And many thanks to all our contributors, both old and new who helped create ActiveMQ,
- for a full list of the people who made it happen, take a look at our <ulink
- url="http://jboss.org.apache.activemq/community/team.html">team page</ulink>. </para>
- </section>
-</chapter>
http://git-wip-us.apache.org/repos/asf/activemq-6/blob/b4144013/docs/user-manual/en/queue-attributes.md
----------------------------------------------------------------------
diff --git a/docs/user-manual/en/queue-attributes.md b/docs/user-manual/en/queue-attributes.md
index d2dafa5..d534673 100644
--- a/docs/user-manual/en/queue-attributes.md
+++ b/docs/user-manual/en/queue-attributes.md
@@ -1,13 +1,11 @@
-Queue Attributes
-================
+# Queue Attributes
Queue attributes can be set in one of two ways. Either by configuring
them using the configuration file or by using the core API. This chapter
will explain how to configure each attribute and what effect the
attribute has.
-Predefined Queues
-=================
+## Predefined Queues
Queues can be predefined via configuration at a core level or at a JMS
level. Firstly let's look at a JMS level.
@@ -59,11 +57,10 @@ which are.
3. There is no entry element.
-4. The filter uses the *Core filter syntax* (described in ?), *not* the
+4. The filter uses the *Core filter syntax* (described in [filter Expressions](filter-expressions.md)), *not* the
JMS selector syntax.
-Using the API
-=============
+## Using the API
Queues can also be created using the core API or the management API.
@@ -74,11 +71,10 @@ previously mentioned attributes. There is one extra attribute that can
be set via this API which is `temporary`. setting this to true means
that the queue will be deleted once the session is disconnected.
-Take a look at ? for a description of the management API for creating
+Take a look at [Management](management.md) for a description of the management API for creating
queues.
-Configuring Queues Via Address Settings
-=======================================
+## Configuring Queues Via Address Settings
There are some attributes that are defined against an address wildcard
rather than a specific queue. Here an example of an `address-setting`
@@ -163,7 +159,7 @@ to disk. If the value is DROP then further messages will be silently
dropped. If the value is FAIL then further messages will be dropped and
an exception will be thrown on the client-side. If the value is BLOCK
then client message producers will block when they try and send further
-messages. See the following chapters for more info ?, ?.
+messages. See the following chapters for more info [Flow Control](flow-control.md), [Paging](paging.md).
`slow-consumer-threshold`. The minimum rate of message consumption
allowed before a consumer is considered "slow." Measured in
http://git-wip-us.apache.org/repos/asf/activemq-6/blob/b4144013/docs/user-manual/en/rest.md
----------------------------------------------------------------------
diff --git a/docs/user-manual/en/rest.md b/docs/user-manual/en/rest.md
index c48ffc1..988d553 100644
--- a/docs/user-manual/en/rest.md
+++ b/docs/user-manual/en/rest.md
@@ -1,5 +1,4 @@
-REST Interface
-==============
+# REST Interface
The ActiveMQ REST interface allows you to leverage the reliability and
scalability features of ActiveMQ over a simple REST/HTTP interface.
@@ -24,8 +23,7 @@ as a JMS message and distributed through core ActiveMQ. Simple and easy.
Consuming messages from a queue or topic looks very similar. We'll
discuss the entire interface in detail later in this docbook.
-Goals of REST Interface
-=======================
+## Goals of REST Interface
Why would you want to use ActiveMQ's REST interface? What are the goals
of the REST interface?
@@ -54,8 +52,7 @@ of the REST interface?
ActiveMQ on the back end without sacrificing the simplicity of a
REST interface.
-Installation and Configuration
-==============================
+## Installation and Configuration
ActiveMQ's REST interface is installed as a Web archive (WAR). It
depends on the [RESTEasy](http://jboss.org/resteasy) project and can
@@ -66,8 +63,7 @@ deploying within JBoss AS 7) or you want the ActiveMQ REST WAR to
startup and manage the ActiveMQ server (e.g. you're deploying within
something like Apache Tomcat).
-Installing Within Pre-configured Environment
---------------------------------------------
+### Installing Within Pre-configured Environment
This section should be used when you want to use the ActiveMQ REST
interface in an environment that already has ActiveMQ installed and
@@ -178,8 +174,7 @@ more about this later.
> It is possible to put the WAR file at the "root context" of AS7, but
> that is beyond the scope of this documentation.
-Bootstrapping ActiveMQ Along with REST
---------------------------------------
+### Bootstrapping ActiveMQ Along with REST
You can bootstrap ActiveMQ within your WAR as well. To do this, you must
have the ActiveMQ core and JMS jars along with Netty, Resteasy, and the
@@ -293,8 +288,7 @@ WEB-INF/classes directory!
</dependencies>
</project>
-REST Configuration
-------------------
+### REST Configuration
The ActiveMQ REST implementation does have some configuration options.
These are configured via XML configuration file that must be in your
@@ -362,8 +356,7 @@ Let's give an explanation of each config option.
same as the ActiveMQ one of the same name. It will be used by
sessions created by the ActiveMQ REST implementation.
-ActiveMQ REST Interface Basics
-==============================
+## ActiveMQ REST Interface Basics
The ActiveMQ REST interface publishes a variety of REST resources to
perform various tasks on a queue or topic. Only the top-level queue and
@@ -372,8 +365,7 @@ all over resources to interact with by looking for and traversing links.
You'll find published links within custom response headers and embedded
in published XML representations. Let's look at how this works.
-Queue and Topic Resources
--------------------------
+### Queue and Topic Resources
To interact with a queue or topic you do a HEAD or GET request on the
following relative URI pattern:
@@ -420,8 +412,7 @@ every time you initially interact (at boot time) with the server. If you
treat all URLs as opaque then you will be isolated from implementation
changes as the ActiveMQ REST interface evolves over time.
-Queue Resource Response Headers
--------------------------------
+### Queue Resource Response Headers
Below is a list of response headers you should expect when interacting
with a Queue resource.
@@ -441,8 +432,7 @@ with a Queue resource.
want the ActiveMQ REST server to push messages to. The semantics of
this link are described in [Pushing Messages](#message-push).
-Topic Resource Response Headers
--------------------------------
+### Topic Resource Response Headers
Below is a list of response headers you should expect when interacting
with a Topic resource.
@@ -462,8 +452,7 @@ with a Topic resource.
you want the ActiveMQ REST server to push messages to. The semantics
of this link are described in [Pushing Messages](#message-push).
-Posting Messages
-================
+## Posting Messages
This chapter discusses the protocol for posting messages to a queue or a
topic. In [ActiveMQ REST Interface Basics](#basics), you saw that a
@@ -548,8 +537,7 @@ ActiveMQ destination. Here's an example scenario:
> then just go back to the queue or topic resource to get the
> `msg-create` URL again.
-Duplicate Detection
--------------------
+### Duplicate Detection
Sometimes you might have network problems when posting new messages to a
queue or topic. You may do a POST and never receive a response.
@@ -670,8 +658,7 @@ The advantage of this approach is that the client does not have to
repost the message. It also only has to come up with a unique
`DUPLICATE_DETECTION_ID` once.
-Persistent Messages
--------------------
+### Persistent Messages
By default, posted messages are not durable and will not be persisted in
ActiveMQ's journal. You can create durable messages by modifying the
@@ -691,8 +678,7 @@ headers. here's an example of that.
<cost>$199.99</cost>
</order>
-TTL, Expiration and Priority
-----------------------------
+### TTL, Expiration and Priority
You can set the time to live, expiration, and/or the priority of the
message in the queue or topic by setting an additional query parameter.
@@ -712,8 +698,7 @@ the priority of the message. i.e.:
<cost>$199.99</cost>
</order>
-Consuming Messages via Pull
-===========================
+## Consuming Messages via Pull
There are two different ways to consume messages from a topic or queue.
You can wait and have the messaging server push them to you, or you can
@@ -769,8 +754,7 @@ parameters (`application/x-www-form-urlencoded`) described below.
> then one consumer might buffer messages while the other consumer gets
> none.
-Auto-Acknowledge
-----------------
+### Auto-Acknowledge
This section focuses on the auto-acknowledge protocol for consuming
messages via a pull. Here's a list of the response headers and URLs
@@ -790,7 +774,7 @@ you'll be interested in.
- `msg-consumer`. This is a URL pointing back to the consumer or
subscription resource created for the client.
-### Creating an Auto-Ack Consumer or Subscription
+#### Creating an Auto-Ack Consumer or Subscription
Here is an example of creating an auto-acknowledged queue pull consumer.
@@ -858,7 +842,7 @@ pull subscription.
although, as you'll see later, it is transmitted with each response
just to remind you.
-### Consuming Messages
+#### Consuming Messages
After you have created a consumer resource, you are ready to start
pulling messages from the server. Notice that when you created the
@@ -935,7 +919,7 @@ resource.
<order>...</order>
-### Recovering From Network Failures
+#### Recovering From Network Failures
If you experience a network failure and do not know if your post to a
msg-consume-next URL was successful or not, just re-do your POST. A POST
@@ -948,7 +932,7 @@ URL). This is the reason why the protocol always requires you to use the
next new msg-consume-next URL returned with each response. Information
about what state the client is in is embedded within the actual URL.
-### Recovering From Client or Server Crashes
+#### Recovering From Client or Server Crashes
If the server crashes and you do a POST to the msg-consume-next URL, the
server will return a 412 (Preconditions Failed) response code. This is
@@ -970,8 +954,7 @@ would happen if the server crashes after auto-acknowledging a message
and before the client receives the message. If you want more reliable
messaging, then you must use the acknowledgement protocol.
-Manual Acknowledgement
-----------------------
+### Manual Acknowledgement
The manual acknowledgement protocol is similar to the auto-ack protocol
except there is an additional round trip to the server to tell it that
@@ -995,7 +978,7 @@ in.
- `msg-consumer`. This is a URL pointing back to the consumer or
subscription resource created for the client.
-### Creating manually-acknowledged consumers or subscriptions
+#### Creating manually-acknowledged consumers or subscriptions
Here is an example of creating an auto-acknowledged queue pull consumer.
@@ -1067,7 +1050,7 @@ topic pull subscription.
although, as you'll see later, it is transmitted with each response
just to remind you.
-### Consuming and Acknowledging a Message
+#### Consuming and Acknowledging a Message
After you have created a consumer resource, you are ready to start
pulling messages from the server. Notice that when you created the
@@ -1127,7 +1110,7 @@ resource.
will contain a new msg-acknowledge-next header that you must use to
obtain the next message.
-### Recovering From Network Failures
+#### Recovering From Network Failures
If you experience a network failure and do not know if your post to a
`msg-acknowledge-next` or `msg-acknowledgement` URL was successful or
@@ -1142,7 +1125,7 @@ at the URLs you'll see that they contain information about the expected
current state of the server. This is how the server knows what the
client is expecting.
-### Recovering From Client or Server Crashes
+#### Recovering From Client or Server Crashes
If the server crashes and while you are doing a POST to the
`msg-acknowledge-next` URL, just re-post. Everything should reconnect
@@ -1168,8 +1151,7 @@ can re-create the consumer resource with the same exact name. The
response will contain the same information as if you did a GET or HEAD
request on the consumer resource.
-Blocking Pulls with Accept-Wait
--------------------------------
+#### Blocking Pulls with Accept-Wait
Unless your queue or topic has a high rate of message flowing though it,
if you use the pull protocol, you're going to be receiving a lot of 503
@@ -1195,8 +1177,7 @@ header with your pull requests. Here's an example:
In this example, we're posting to a msg-consume-next URL and telling the
server that we would be willing to block for 30 seconds.
-Clean Up Your Consumers!
-------------------------
+### Clean Up Your Consumers!
When the client is done with its consumer or topic subscription it
should do an HTTP DELETE call on the consumer URL passed back from the
@@ -1208,16 +1189,14 @@ clean up your messes. A consumer timeout for durable subscriptions will
not delete the underlying durable JMS subscription though, only the
server-side consumer resource (and underlying JMS session).
-Pushing Messages
-================
+## Pushing Messages
You can configure the ActiveMQ REST server to push messages to a
registered URL either remotely through the REST interface, or by
creating a pre-configured XML file for the ActiveMQ REST server to load
at boot time.
-The Queue Push Subscription XML
--------------------------------
+### The Queue Push Subscription XML
Creating a push consumer for a queue first involves creating a very
simple XML document. This document tells the server if the push
@@ -1302,8 +1281,7 @@ values a rel attribute can have:
<link href="http://somewhere.com" type="application/json" method="PUT"/>
</push-registration>
-The Topic Push Subscription XML
--------------------------------
+### The Topic Push Subscription XML
The push XML for a topic is the same except the root element is
push-topic-registration. (Also remember the `selector` element is
@@ -1319,8 +1297,7 @@ template registration:
<link rel="template" href="http://somewhere.com/resources/{id}/messages" method="POST"/>
</push-topic registration>
-Creating a Push Subscription at Runtime
----------------------------------------
+### Creating a Push Subscription at Runtime
Creating a push subscription at runtime involves getting the factory
resource URL from the msg-push-consumers header, if the destination is a
@@ -1387,8 +1364,7 @@ Here's an example of creating a push registration for a topic:
The Location header contains the URL for the created resource. If
you want to unregister this, then do a HTTP DELETE on this URL.
-Creating a Push Subscription by Hand
-------------------------------------
+### Creating a Push Subscription by Hand
You can create a push XML file yourself if you do not want to go through
the REST interface to create a push subscription. There is some
@@ -1420,8 +1396,7 @@ variable defined in Chapter 2:
<topic>jms.topic.foo</topic>
</push-topic-registration>
-Pushing to Authenticated Servers
---------------------------------
+### Pushing to Authenticated Servers
Push subscriptions only support BASIC and DIGEST authentication out of
the box. Here is an example of adding BASIC authentication:
@@ -1450,8 +1425,7 @@ headers might look like:
<header name="secret-header">jfdiwe3321</header>
</push-topic registration>
-Creating Destinations
-=====================
+## Creating Destinations
You can create a durable queue or topic through the REST interface.
Currently you cannot create a temporary queue or topic. To create a
@@ -1487,11 +1461,9 @@ Here's what creating a topic would look like:
HTTP/1.1 201 Created
Location: http://example.com/topics/jms.topic.testTopic
-Securing the ActiveMQ REST Interface
-====================================
+## Securing the ActiveMQ REST Interface
-Within JBoss Application server
--------------------------------
+### Within JBoss Application server
Securing the ActiveMQ REST interface is very simple with the JBoss
Application Server. You turn on authentication for all URLs within your
@@ -1499,8 +1471,7 @@ WAR's web.xml, and let the user Principal to propagate to ActiveMQ. This
only works if you are using the JBossSecurityManager with ActiveMQ. See
the ActiveMQ documentation for more details.
-Security in other environments
-------------------------------
+### Security in other environments
To secure the ActiveMQ REST interface in other environments you must
role your own security by specifying security constraints with your
@@ -1520,8 +1491,7 @@ is a list of URI patterns:
/topics/{topic-name}/push-subscriptions/\* secure this URL pattern for pushing messages.
-------------------------------------------- -----------------------------------------------------------------------
-Mixing JMS and REST
-===================
+## Mixing JMS and REST
The ActiveMQ REST interface supports mixing JMS and REST producers and
consumers. You can send an ObjectMessage through a JMS Producer, and
@@ -1530,8 +1500,7 @@ to a topic and have a JMS Consumer receive it. Some simple
transformations are supported if you have the correct RESTEasy providers
installed.
-JMS Producers - REST Consumers
-------------------------------
+### JMS Producers - REST Consumers
If you have a JMS producer, the ActiveMQ REST interface only supports
ObjectMessage type. If the JMS producer is aware that there may be REST
@@ -1551,8 +1520,7 @@ types it wants to convert the Java object into. If the REST client is a
push registration, then the type attribute of the link element of the
push registration should be set to the desired type.
-REST Producers - JMS Consumers
-------------------------------
+### REST Producers - JMS Consumers
If you have a REST client producing messages and a JMS consumer,
ActiveMQ REST has a simple helper class for you to transform the HTTP
http://git-wip-us.apache.org/repos/asf/activemq-6/blob/b4144013/docs/user-manual/en/scheduled-messages.md
----------------------------------------------------------------------
diff --git a/docs/user-manual/en/scheduled-messages.md b/docs/user-manual/en/scheduled-messages.md
index e8f4cad..22812e2 100644
--- a/docs/user-manual/en/scheduled-messages.md
+++ b/docs/user-manual/en/scheduled-messages.md
@@ -1,13 +1,11 @@
-Scheduled Messages
-==================
+# Scheduled Messages
Scheduled messages differ from normal messages in that they won't be
delivered until a specified time in the future, at the earliest.
To do this, a special property is set on the message before sending it.
-Scheduled Delivery Property
-===========================
+## Scheduled Delivery Property
The property name used to identify a scheduled message is
`"_HQ_SCHED_DELIVERY"` (or the constant
@@ -17,20 +15,20 @@ The specified value must be a positive `long` corresponding to the time
the message must be delivered (in milliseconds). An example of sending a
scheduled message using the JMS API is as follows.
- TextMessage message = session.createTextMessage("This is a scheduled message message which will be delivered in 5 sec.");
- message.setLongProperty("_HQ_SCHED_DELIVERY", System.currentTimeMillis() + 5000);
- producer.send(message);
+``` java
+TextMessage message = session.createTextMessage("This is a scheduled message message which will be delivered in 5 sec.");
+message.setLongProperty("_HQ_SCHED_DELIVERY", System.currentTimeMillis() + 5000);
+producer.send(message);
- ...
-
- // message will not be received immediately but 5 seconds later
- TextMessage messageReceived = (TextMessage) consumer.receive();
+...
+// message will not be received immediately but 5 seconds later
+TextMessage messageReceived = (TextMessage) consumer.receive();
+```
Scheduled messages can also be sent using the core API, by setting the
same property on the core message before sending.
-Example
-=======
+## Example
See ? for an example which shows how scheduled messages can be used with
JMS.
http://git-wip-us.apache.org/repos/asf/activemq-6/blob/b4144013/docs/user-manual/en/security.md
----------------------------------------------------------------------
diff --git a/docs/user-manual/en/security.md b/docs/user-manual/en/security.md
index 6871334..efc610a 100644
--- a/docs/user-manual/en/security.md
+++ b/docs/user-manual/en/security.md
@@ -1,5 +1,4 @@
-Security
-========
+# Security
This chapter describes how security works with ActiveMQ and how you can
configure it. To disable security completely simply set the
@@ -11,13 +10,12 @@ long. To change this period set the property
`security-invalidation-interval`, which is in milliseconds. The default
is `10000` ms.
-Role based security for addresses
-=================================
+## Role based security for addresses
ActiveMQ contains a flexible role-based security model for applying
security to queues, based on their addresses.
-As explained in ?, ActiveMQ core consists mainly of sets of queues bound
+As explained in [Using Core](using-core.md), ActiveMQ core consists mainly of sets of queues bound
to addresses. A message is sent to an address and the server looks up
the set of queues that are bound to that address, the server then routes
the message to those set of queues.
@@ -69,7 +67,8 @@ Let's take a simple example, here's a security block from
The '`#`' character signifies "any sequence of words". Words are
delimited by the '`.`' character. For a full description of the wildcard
-syntax please see ?. The above security block applies to any address
+syntax please see [Understanding the HornetQ Wildcard Syntax](wildcard-syntax.md).
+The above security block applies to any address
that starts with the string "globalqueues.europe.":
Only users who have the `admin` role can create or delete durable queues
@@ -88,7 +87,7 @@ security manager. ActiveMQ ships with a user manager that reads user
credentials from a file on disk, and can also plug into JAAS or JBoss
Application Server security.
-For more information on configuring the security manager, please see ?.
+For more information on configuring the security manager, please see 'Changing the Security Manager'.
There can be zero or more `security-setting` elements in each xml file.
Where more than one match applies to a set of addresses the *more
@@ -121,18 +120,16 @@ permissions in more specific security-setting blocks by simply not
specifying them. Otherwise it would not be possible to deny permissions
in sub-groups of addresses.
-Secure Sockets Layer (SSL) Transport
-====================================
+## Secure Sockets Layer (SSL) Transport
When messaging clients are connected to servers, or servers are
connected to other servers (e.g. via bridges) over an untrusted network
then ActiveMQ allows that traffic to be encrypted using the Secure
Sockets Layer (SSL) transport.
-For more information on configuring the SSL transport, please see ?.
+For more information on configuring the SSL transport, please see [Configuring the Transport](configuring-transports.md).
-Basic user credentials
-======================
+## Basic user credentials
ActiveMQ ships with a security manager implementation that reads user
credentials, i.e. user names, passwords and role information from an xml
@@ -178,8 +175,7 @@ We then have three more users, the user `tim` has the role `admin`. The
user `andy` has the roles `admin` and `guest`, and the user `jeff` has
the roles `europe-users` and `guest`.
-Changing the security manager
-=============================
+## Changing the security manager
If you do not want to use the default security manager then you can
specify a different one by editing the file `activemq-beans.xml` (or
@@ -209,8 +205,7 @@ running JBoss Application Server).
These two implementations are discussed in the next two sections.
-JAAS Security Manager
-=====================
+## JAAS Security Manager
JAAS stands for 'Java Authentication and Authorization Service' and is a
standard part of the Java platform. It provides a common API for
@@ -245,14 +240,12 @@ properties:
- CallbackHandler: the `CallbackHandler` implementation to use if user
interaction are required
-Example
--------
+## Example
See ? for an example which shows how ActiveMQ can be configured to use
JAAS.
-JBoss AS Security Manager
-=========================
+## JBoss AS Security Manager
The JBoss AS security manager is used when running ActiveMQ inside the
JBoss Application server. This allows tight integration with the JBoss
@@ -265,8 +258,7 @@ Take a look at one of the default `activemq-jboss-beans.xml` files for
JBoss Application Server that are bundled in the distribution for an
example of how this is configured.
-Configuring Client Login
-------------------------
+### Configuring Client Login
JBoss can be configured to allow client login, basically this is when a
JEE component such as a Servlet or EJB sets security credentials on the
@@ -287,20 +279,18 @@ There is more info on using the JBoss client login module
> meaning that the security context has been cleared. If this is the
> case then messages will need to be sent blocking
-Changing the Security Domain
-----------------------------
+### Changing the Security Domain
The name of the security domain used by the JBoss AS security manager
defaults to `java:/jaas/activemq
`. This can be changed by specifying `securityDomainName`
(e.g. java:/jaas/myDomain).
-Changing the username/password for clustering
-=============================================
+## Changing the username/password for clustering
In order for cluster connections to work correctly, each node in the
cluster must make connections to the other nodes. The username/password
they use for this should always be changed from the installation default
to prevent a security risk.
-Please see ? for instructions on how to do this.
+Please see [Management](management.md) for instructions on how to do this.
http://git-wip-us.apache.org/repos/asf/activemq-6/blob/b4144013/docs/user-manual/en/send-guarantees.md
----------------------------------------------------------------------
diff --git a/docs/user-manual/en/send-guarantees.md b/docs/user-manual/en/send-guarantees.md
index 439f70e..4027897 100644
--- a/docs/user-manual/en/send-guarantees.md
+++ b/docs/user-manual/en/send-guarantees.md
@@ -1,8 +1,6 @@
-Guarantees of sends and commits
-===============================
+# Guarantees of sends and commits
-Guarantees of Transaction Completion
-====================================
+## Guarantees of Transaction Completion
When committing or rolling back a transaction with ActiveMQ, the request
to commit or rollback is sent to the server, and the call will block on
@@ -26,8 +24,7 @@ of some loss of transaction durability.
This parameter is set in `activemq-configuration.xml`
-Guarantees of Non Transactional Message Sends
-=============================================
+## Guarantees of Non Transactional Message Sends
If you are sending messages to a server using a non transacted session,
ActiveMQ can be configured to block the call to send until the message
@@ -53,7 +50,7 @@ of your network. For better performance we recommend either batching
many messages sends together in a transaction since with a transactional
session, only the commit / rollback blocks not every send, or, using
ActiveMQ's advanced *asynchronous send acknowledgements feature*
-described in ?.
+described in Asynchronous Send Acknowledgements.
If you are using JMS and you're using the JMS service on the server to
load your JMS connection factory instances into JNDI then these
@@ -75,8 +72,7 @@ send a response back to the client until the message has been persisted
and the server has a guarantee that the data has been persisted to disk.
The default value for this parameter is `true`.
-Guarantees of Non Transactional Acknowledgements
-================================================
+## Guarantees of Non Transactional Acknowledgements
If you are acknowledging the delivery of a message at the client side
using a non transacted session, ActiveMQ can be configured to block the
@@ -89,12 +85,11 @@ been sent back. You might want to set this to `true` if you want to
implement a strict *at most once* delivery policy. The default value is
`false`
-Asynchronous Send Acknowledgements
-==================================
+## Asynchronous Send Acknowledgements
If you are using a non transacted session but want a guarantee that
every message sent to the server has reached it, then, as discussed in
-?, you can configure ActiveMQ to block the call to send until the server
+Guarantees of Non Transactional Message Sends, you can configure ActiveMQ to block the call to send until the server
has received the message, persisted it and sent back a response. This
works well but has a severe performance penalty - each call to send
needs to block for at least the time of a network round trip (RTT) - the
@@ -128,10 +123,9 @@ successfully reached the server.
The window size for send acknowledgements is determined by the
confirmation-window-size parameter on the connection factory or client
-session factory. Please see ? for more info on this.
+session factory. Please see [Client Reconnection and Session Reattachment](client-reconnection.md) for more info on this.
-Asynchronous Send Acknowledgements
-----------------------------------
+# Asynchronous Send Acknowledgements
To use the feature using the core API, you implement the interface
`org.apache.activemq.api.core.client.SendAcknowledgementHandler` and set