ARTEMIS-3657 refactor address docs

Mainly refactoring the address docs. This commit has the following
changes:

 - Remove examples for discouraged use-cases (e.g. using anycast and
multicast on the same address).
 - Reword to use configuration terms wherever possible. For example,
instead of saying "point-to-point" (which is not a configuration term)
say "anycast". References to things like "point-to-point" and
"publish-subscribe" are still there since users are familiar with these
terms. They're just used much less often.
 - Remove duplicate explanation of exclusive queues.
 - Remove duplicate explanation of auto-create and auto-delete elements.
 - Re-create graphics and include the master SVGs for potential updates
later.
 - Give non-destructive queues its own chapter.
 - Add details about specifying routing type using a message property.
 - Update the styling on the user manual's cover page to look better.
 - Lots of re-wording for clarity's sake.
 - Re-order sub-sections for clarity's sake.
 - Break up the address model and the settings documentation. The
settings documentation is large and deserves its own chapter. The
original anchor link is still available with a link to the new chapter.

In general the address-specific documentation should be much more clear,
concise, and consistent now.
This commit is contained in:
Justin Bertram 2022-01-22 00:16:50 -06:00
parent 293b96aa45
commit 2dc76bd9f4
No known key found for this signature in database
GPG Key ID: F41830B875BB8633
24 changed files with 2965 additions and 920 deletions

View File

@ -1,7 +1,5 @@
![ActiveMQ Artemis logo](images/activemq-logo.png)
Apache ActiveMQ Artemis User Manual
====================
The User manual is an in-depth manual on all aspects of Apache ActiveMQ Artemis
<!-- using HTML directly here since this formatting isn't available in Markdown -->
<img style="margin: auto; display: block" src="images/activemq-logo.png"></img>
<H1 style="text-align: center">Apache ActiveMQ Artemis User Manual</H1>
<div style="text-align: center">An in-depth manual on all aspects of Apache ActiveMQ Artemis</div>

View File

@ -9,7 +9,9 @@
* [Architecture](architecture.md)
* [Using the Server](using-server.md)
* [Upgrading](upgrading.md)
* [Address Model](address-model.md)
* Address
* [Model](address-model.md)
* [Settings](address-settings.md)
* [Protocols and Interoperability](protocols-interoperability.md)
* [AMQP](amqp.md)
* [Broker Connections](amqp-broker-connections.md)
@ -40,6 +42,7 @@
* [Paging](paging.md)
* [Scheduled Messages](scheduled-messages.md)
* [Last-Value Queues](last-value-queues.md)
* [Non-Destructive Queues](non-destructive-queues.md)
* [Ring Queues](ring-queues.md)
* [Retroactive Addresses](retroactive-addresses.md)
* [Exclusive Queues](exclusive-queues.md)

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,354 @@
# Configuring Addresses and Queues via Address Settings
There are some attributes that are defined against an address wildcard rather
than a specific address/queue. Here an example of an `address-setting` entry
that would be found in the `broker.xml` file.
```xml
<address-settings>
<address-setting match="order.foo">
<dead-letter-address>DLA</dead-letter-address>
<auto-create-dead-letter-resources>false</auto-create-dead-letter-resources>
<dead-letter-queue-prefix>DLQ.</dead-letter-queue-prefix>
<dead-letter-queue-suffix></dead-letter-queue-suffix>
<expiry-address>ExpiryQueue</expiry-address>
<auto-create-expiry-resources>false</auto-create-expiry-resources>
<expiry-queue-prefix>EXP.</expiry-queue-prefix>
<expiry-queue-suffix></expiry-queue-suffix>
<expiry-delay>123</expiry-delay>
<redelivery-delay>5000</redelivery-delay>
<redelivery-delay-multiplier>1.0</redelivery-delay-multiplier>
<redelivery-collision-avoidance-factor>0.0</redelivery-collision-avoidance-factor>
<max-redelivery-delay>10000</max-redelivery-delay>
<max-delivery-attempts>3</max-delivery-attempts>
<max-size-bytes>100000</max-size-bytes>
<max-size-bytes-reject-threshold>-1</max-size-bytes-reject-threshold>
<page-size-bytes>20000</page-size-bytes>
<page-max-cache-size></page-max-cache-size>
<address-full-policy>PAGE</address-full-policy>
<message-counter-history-day-limit></message-counter-history-day-limit>
<last-value-queue>true</last-value-queue> <!-- deprecated! see default-last-value-queue -->
<default-last-value-queue>false</default-last-value-queue>
<default-non-destructive>false</default-non-destructive>
<default-exclusive-queue>false</default-exclusive-queue>
<default-consumers-before-dispatch>0</default-consumers-before-dispatch>
<default-delay-before-dispatch>-1</default-delay-before-dispatch>
<redistribution-delay>0</redistribution-delay>
<send-to-dla-on-no-route>true</send-to-dla-on-no-route>
<slow-consumer-threshold>-1</slow-consumer-threshold>
<slow-consumer-threshold-measurement-unit>MESSAGES_PER_SECOND</slow-consumer-threshold-measurement-unit>
<slow-consumer-policy>NOTIFY</slow-consumer-policy>
<slow-consumer-check-period>5</slow-consumer-check-period>
<auto-create-queues>true</auto-create-queues>
<auto-delete-queues>true</auto-delete-queues>
<auto-delete-created-queues>false</auto-delete-created-queues>
<auto-delete-queues-delay>0</auto-delete-queues-delay>
<auto-delete-queues-message-count>0</auto-delete-queues-message-count>
<config-delete-queues>OFF</config-delete-queues>
<config-delete-diverts>OFF</config-delete-diverts>
<auto-create-addresses>true</auto-create-addresses>
<auto-delete-addresses>true</auto-delete-addresses>
<auto-delete-addresses-delay>0</auto-delete-addresses-delay>
<config-delete-addresses>OFF</config-delete-addresses>
<management-browse-page-size>200</management-browse-page-size>
<management-message-attribute-size-limit>256</management-message-attribute-size-limit>
<default-purge-on-no-consumers>false</default-purge-on-no-consumers>
<default-max-consumers>-1</default-max-consumers>
<default-queue-routing-type></default-queue-routing-type>
<default-address-routing-type></default-address-routing-type>
<default-ring-size>-1</default-ring-size>
<retroactive-message-count>0</retroactive-message-count>
<enable-metrics>true</enable-metrics>
<enable-ingress-timestamp>false</enable-ingress-timestamp>
</address-setting>
</address-settings>
```
The idea with address settings, is you can provide a block of settings which
will be applied against any addresses that match the string in the `match`
attribute. In the above example the settings would only be applied to the
address "order.foo" address but you can also use
[wildcards](wildcard-syntax.md) to apply settings.
For example, if you used the `match` string `queue.#` the settings would be
applied to all addresses which start with `queue.`
The meaning of the specific settings are explained fully throughout the user
manual, however here is a brief description with a link to the appropriate
chapter if available.
`dead-letter-address` is the address to which messages are sent when they
exceed `max-delivery-attempts`. If no address is defined here then such
messages will simply be discarded. Read more about [undelivered
messages](undelivered-messages.md#configuring-dead-letter-addresses).
`auto-create-dead-letter-resources` determines whether or not the broker will
automatically create the defined `dead-letter-address` and a corresponding
dead-letter queue when a message is undeliverable. Read more in the chapter
about [undelivered messages](undelivered-messages.md).
`dead-letter-queue-prefix` defines the prefix used for automatically created
dead-letter queues. Read more in the chapter about
[undelivered messages](undelivered-messages.md).
`dead-letter-queue-suffix` defines the suffix used for automatically created
dead-letter queues. Read more in the chapter about
[undelivered messages](undelivered-messages.md).
`expiry-address` defines where to send a message that has expired. If no
address is defined here then such messages will simply be discarded. Read more
about [message expiry](message-expiry.md#configuring-expiry-addresses).
`auto-create-expiry-resources` determines whether or not the broker will
automatically create the defined `expiry-address` and a corresponding expiry
queue when a message expired. Read more in the chapter about
[undelivered messages](undelivered-messages.md).
`expiry-queue-prefix` defines the prefix used for automatically created expiry
queues. Read more in the chapter about [message expiry](message-expiry.md).
`expiry-queue-suffix` defines the suffix used for automatically created expiry
queues. Read more in the chapter about [message expiry](message-expiry.md).
`expiry-delay` defines the expiration time that will be used for messages which
are using the default expiration time (i.e. 0). For example, if `expiry-delay`
is set to "10" and a message which is using the default expiration time (i.e.
0) arrives then its expiration time of "0" will be changed to "10." However, if
a message which is using an expiration time of "20" arrives then its expiration
time will remain unchanged. Setting `expiry-delay` to "-1" will disable this
feature. The default is "-1". Read more about [message
expiry](message-expiry.md#configuring-expiry-addresses).
`max-delivery-attempts` defines how many time a cancelled message can be
redelivered before sending to the `dead-letter-address`. Read more about
[undelivered
messages](undelivered-messages.md#configuring-dead-letter-addresses).
`redelivery-delay` defines how long to wait before attempting redelivery of a
cancelled message. Default is `0`. Read more about [undelivered
messages](undelivered-messages.md#configuring-delayed-redelivery).
`redelivery-delay-multiplier` defines the number by which the
`redelivery-delay` will be multiplied on each subsequent redelivery attempt.
Default is `1.0`. Read more about [undelivered
messages](undelivered-messages.md#configuring-delayed-redelivery).
`redelivery-collision-avoidance-factor` defines an additional factor used to
calculate an adjustment to the `redelivery-delay` (up or down). Default is
`0.0`. Valid values are between 0.0 and 1.0. Read more about [undelivered
messages](undelivered-messages.md#configuring-delayed-redelivery).
`max-size-bytes`, `page-size-bytes`, & `page-max-cache-size` are used to
configure paging on an address. This is explained
[here](paging.md#configuration).
`max-size-bytes-reject-threshold` is used with the address full `BLOCK` policy,
the maximum size (in bytes) an address can reach before messages start getting
rejected. Works in combination with `max-size-bytes` **for AMQP clients only**.
Default is `-1` (i.e. no limit).
`address-full-policy`. This attribute can have one of the following values:
`PAGE`, `DROP`, `FAIL` or `BLOCK` and determines what happens when an address
where `max-size-bytes` is specified becomes full. The default value is `PAGE`.
If the value is `PAGE` then further messages will be paged 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 [Flow
Control](flow-control.md) and [Paging](paging.md) chapters for more info.
`message-counter-history-day-limit` is the number of days to keep message
counter history for this address assuming that `message-counter-enabled` is
`true`. Default is `0`.
`default-last-value-queue` defines whether a queue only uses last values or
not. Default is `false`. This value can be overridden at the queue level using
the `last-value` boolean. Read more about [last value
queues](last-value-queues.md).
`default-exclusive-queue` defines whether a queue will serve only a single
consumer. Default is `false`. This value can be overridden at the queue level
using the `exclusive` boolean. Read more about [exclusive
queues](exclusive-queues.md).
`default-consumers-before-dispatch` defines the number of consumers needed on a
queue bound to the matching address before messages will be dispatched to those
consumers. Default is `0`. This value can be overridden at the queue level using
the `consumers-before-dispatch` boolean. This behavior can be tuned using
`delay-before-dispatch` on the queue itself or by using the
`default-delay-before-dispatch` address-setting.
`default-delay-before-dispatch` defines the number of milliseconds the broker
will wait for the configured number of consumers to connect to the matching queue
before it will begin to dispatch messages. Default is `-1` (wait forever).
`redistribution-delay` defines how long to wait when the last consumer is
closed on a queue before redistributing any messages. Read more about
[clusters](clusters.md#message-redistribution).
`send-to-dla-on-no-route`. If a message is sent to an address, but the server
does not route it to any queues (e.g. there might be no queues bound to that
address, or none of the queues have filters that match) then normally that
message would be discarded. However, if this parameter is `true` then such a
message will instead be sent to the `dead-letter-address` (DLA) for that
address, if it exists.
`slow-consumer-threshold`. The minimum rate of message consumption allowed
before a consumer is considered "slow." Measured in units specified by the
slow-consumer-threshold-measurement-unit configuration option. Default is `-1`
(i.e. disabled); any other value must be greater than 0 to ensure a queue
has messages, and it is the actual consumer that is slow. A value of 0 will
allow a consumer with no messages pending to be considered slow.
Read more about [slow consumers](slow-consumers.md).
`slow-consumer-threshold-measurement-unit`. The units used to measure the
slow-consumer-threshold. Valid options are:
* MESSAGES_PER_SECOND
* MESSAGES_PER_MINUTE
* MESSAGES_PER_HOUR
* MESSAGES_PER_DAY
If no unit is specified the default MESSAGES_PER_SECOND will be used.
Read more about [slow consumers](slow-consumers.md).
`slow-consumer-policy`. What should happen when a slow consumer is detected.
`KILL` will kill the consumer's connection (which will obviously impact any
other client threads using that same connection). `NOTIFY` will send a
CONSUMER\_SLOW management notification which an application could receive and
take action with. Read more about [slow consumers](slow-consumers.md).
`slow-consumer-check-period`. How often to check for slow consumers on a
particular queue. Measured in *seconds*. Default is `5`.
* Note: This should be at least 2x the maximum time it takes a consumer to process
1 message. For example, if the slow-consumer-threshold is set to 1 and the
slow-consumer-threshold-measurement-unit is set to MESSAGES_PER_MINUTE then this
should be set to at least 2 x 60s i.e. 120s.
Read more about [slow
consumers](slow-consumers.md).
`auto-create-queues`. Whether or not the broker should automatically create a
queue when a message is sent or a consumer tries to connect to a queue whose
name fits the address `match`. Queues which are auto-created are durable,
non-temporary, and non-transient. Default is `true`. **Note:** automatic queue
creation does *not* work for the core client. The core API is a low-level API
and is not meant to have such automation.
`auto-delete-queues`. Whether or not the broker should automatically delete
auto-created queues when they have both 0 consumers and the message count is
less than or equal to `auto-delete-queues-message-count`. Default is
`true`.
`auto-delete-created-queues`. Whether or not the broker should automatically delete
created queues when they have both 0 consumers and the message count is
less than or equal to `auto-delete-queues-message-count`. Default is
`false`.
`auto-delete-queues-delay`. How long to wait (in milliseconds) before deleting
auto-created queues after the queue has 0 consumers and the message count is
less than or equal to `auto-delete-queues-message-count`.
Default is `0` (delete immediately). The broker's `address-queue-scan-period` controls
how often (in milliseconds) queues are scanned for potential deletion. Use `-1`
to disable scanning. The default scan value is `30000`.
`auto-delete-queues-message-count`. The message count that the queue must be
less than or equal to before deleting auto-created queues.
To disable message count check `-1` can be set.
Default is `0` (empty queue).
**Note:** the above auto-delete address settings can also be configured
individually at the queue level when a client auto creates the queue.
For Core API it is exposed in createQueue methods.
For Core JMS you can set it using the destination queue attributes
`my.destination?auto-delete=true&auto-delete-delay=120000&auto-delete-message-count=-1`
`config-delete-queues`. How the broker should handle queues deleted on config
reload, by delete policy: `OFF` or `FORCE`. Default is `OFF`. Read more about
[configuration reload](config-reload.md).
`config-delete-diverts`. How the broker should handle diverts deleted on config
reload, by delete policy: `OFF` or `FORCE`. Default is `OFF`. Read more about
[configuration reload](config-reload.md).
`auto-create-addresses`. Whether or not the broker should automatically create
an address when a message is sent to or a consumer tries to consume from a
queue which is mapped to an address whose name fits the address `match`.
Default is `true`. **Note:** automatic address creation does *not* work for the
core client. The core API is a low-level API and is not meant to have such
automation.
`auto-delete-addresses`. Whether or not the broker should automatically delete
auto-created addresses once the address no longer has any queues. Default is
`true`.
`auto-delete-addresses-delay`. How long to wait (in milliseconds) before
deleting auto-created addresses after they no longer have any queues. Default
is `0` (delete immediately). The broker's `address-queue-scan-period` controls
how often (in milliseconds) addresses are scanned for potential deletion. Use
`-1` to disable scanning. The default scan value is `30000`.
`config-delete-addresses`. How the broker should handle addresses deleted on
config reload, by delete policy: `OFF` or `FORCE`. Default is `OFF`. Read more
about [configuration reload](config-reload.md).
`management-browse-page-size` is the number of messages a management resource
can browse. This is relevant for the `browse, list and count-with-filter` management
methods exposed on the queue control. Default is `200`.
`management-message-attribute-size-limit` is the number of bytes collected from
the message for browse. This is relevant for the `browse and list` management
methods exposed on the queue control. Message attributes longer than this value
appear truncated. Default is `256`. Use `-1` to switch this limit off. Note that
memory needs to be allocated for all messages that are visible at a given moment.
Setting this value too high may impact the browser stability due to the large
amount of memory that may be required to browse through many messages.
`default-purge-on-no-consumers` defines a queue's default
`purge-on-no-consumers` setting if none is provided on the queue itself.
Default is `false`. This value can be overridden at the queue level using the
`purge-on-no-consumers` boolean. Read more about [this
functionality](#non-durable-subscription-queue).
`default-max-consumers` defines a queue's default `max-consumers` setting if
none is provided on the queue itself. Default is `-1` (i.e. no limit). This
value can be overridden at the queue level using the `max-consumers` boolean.
Read more about [this
functionality](#shared-durable-subscription-queue-using-max-consumers).
`default-queue-routing-type` defines the routing-type for an auto-created queue
if the broker is unable to determine the routing-type based on the client
and/or protocol semantics. Default is `MULTICAST`. Read more about [routing
types](#routing-type).
`default-address-routing-type` defines the routing-type for an auto-created
address if the broker is unable to determine the routing-type based on the
client and/or protocol semantics. Default is `MULTICAST`. Read more about
[routing types](#routing-type).
`default-consumer-window-size` defines the default `consumerWindowSize` value
for a `CORE` protocol consumer, if not defined the default will be set to
1 MiB (1024 * 1024 bytes). The consumer will use this value as the window size
if the value is not set on the client. Read more about
[flow control](flow-control.md).
`default-ring-size` defines the default `ring-size` value for any matching queue
which doesn't have `ring-size` explicitly defined. If not defined the default will
be set to -1. Read more about [ring queues](ring-queues.md).
`retroactive-message-count` defines the number of messages to preserve for future
queues created on the matching address. Defaults to 0. Read more about
[retroactive addresses](retroactive-addresses.md).
`enable-metrics` determines whether or not metrics will be published to any
configured metrics plugin for the matching address. Default is `true`. Read more
about [metrics](metrics.md).
`enable-ingress-timestamp` determines whether or not the broker will add its time
to messages sent to the matching address. When `true` the exact behavior will
depend on the specific protocol in use. For AMQP messages the broker will add a
`long` *message annotation* named `x-opt-ingress-time`. For core messages (used by
the core and OpenWire protocols) the broker will add a long property named
`_AMQ_INGRESS_TIMESTAMP`. For STOMP messages the broker will add a frame header
named `ingress-timestamp`. The value will be the number of milliseconds since the
[epoch](https://en.wikipedia.org/wiki/Unix_time). Default is `false`.

View File

@ -837,7 +837,7 @@ By default, message redistribution is disabled.
Message redistribution can be configured on a per address basis, by
specifying the redistribution delay in the address settings. For more
information on configuring address settings, please see [Configuring Addresses and Queues via Address Settings](address-model.md#configuring-addresses-and-queues-via-address-settings).
information on configuring address settings, please see [Configuring Addresses and Queues via Address Settings](address-settings.md).
Here's an address settings snippet from `broker.xml`
showing how message redistribution is enabled for a set of queues:

View File

@ -97,7 +97,7 @@ Name | Description | Default
[acceptors](configuring-transports.md#acceptors) | a list of remoting acceptors | n/a
[acceptors.acceptor](configuring-transports.md#acceptors) | Each acceptor is composed for just an URL | n/a
[addresses](address-model.md#basic-address-configuration) | [a list of addresses](#address-type) | n/a
[address-settings](address-model.md#configuring-addresses-and-queues-via-address-settings) | [a list of address-setting](#address-setting-type) | n/a
[address-settings](address-settings.md) | [a list of address-setting](#address-setting-type) | n/a
[allow-failback](ha.md#failing-back-to-live-server)| Should stop backup on live restart. | `true`
[amqp-use-core-subscription-naming](amqp.md) | If true uses CORE queue naming convention for AMQP. | `false`
[async-connection-execution-enabled](connection-ttl.md) | If False delivery would be always asynchronous. | `true`
@ -158,7 +158,7 @@ log-delegate-factory-class-name | **deprecated** the name of the factory class t
[message-expiry-scan-period](message-expiry.md#configuring-the-expiry-reaper-thread) | how often (in ms) to scan for expired messages. | 30000
[message-expiry-thread-priority](message-expiry.md#configuring-the-expiry-reaper-thread)| **deprecated** the priority of the thread expiring messages. | 3
[metrics-plugin](metrics.md) | [a plugin to export metrics](#metrics-plugin-type) | n/a
[address-queue-scan-period](address-model.md#configuring-addresses-and-queues-via-address-settings) | how often (in ms) to scan for addresses & queues that should be removed. | 30000
[address-queue-scan-period](address-settings.md) | how often (in ms) to scan for addresses & queues that should be removed. | 30000
name | node name; used in topology notifications if set. | n/a
[password-codec](masking-passwords.md) | the name of the class (and optional configuration properties) used to decode masked passwords. Only valid when `mask-password` is `true`. | n/a
[page-max-concurrent-io](paging.md) | The max number of concurrent reads allowed on paging. | 5
@ -235,19 +235,19 @@ Name | Description | Default
[slow-consumer-threshold](slow-consumers.md) | Min rate of msgs/sec consumed before a consumer is considered "slow" | -1
[slow-consumer-policy](slow-consumers.md) | What to do when "slow" consumer is detected | `NOTIFY`
[slow-consumer-check-period](slow-consumers.md) | How often to check for "slow" consumers | 5
[auto-create-jms-queues](address-model.md#configuring-addresses-and-queues-via-address-settings)| **deprecated** Create JMS queues automatically; see `auto-create-queues` & `auto-create-addresses` | `true`
[auto-delete-jms-queues](address-model.md#configuring-addresses-and-queues-via-address-settings)| **deprecated** Delete JMS queues automatically; see `auto-create-queues` & `auto-create-addresses` | `true`
[auto-create-jms-topics](address-model.md#configuring-addresses-and-queues-via-address-settings)| **deprecated** Create JMS topics automatically; see `auto-create-queues` & `auto-create-addresses` | `true`
[auto-delete-jms-topics](address-model.md#configuring-addresses-and-queues-via-address-settings)| **deprecated** Delete JMS topics automatically; see `auto-create-queues` & `auto-create-addresses` | `true`
[auto-create-queues](address-model.md#configuring-addresses-and-queues-via-address-settings) | Create queues automatically | `true`
[auto-delete-queues](address-model.md#configuring-addresses-and-queues-via-address-settings) | Delete auto-created queues automatically | `true`
[auto-delete-created-queues](address-model.md#configuring-addresses-and-queues-via-address-settings) | Delete created queues automatically | `false`
[auto-delete-queues-delay](address-model.md#configuring-addresses-and-queues-via-address-settings) | Delay for deleting auto-created queues | 0
[auto-delete-queues-message-count](address-model.md#configuring-addresses-and-queues-via-address-settings) | Message count the queue must be at or below before it can be auto deleted | 0
[auto-create-jms-queues](address-settings.md)| **deprecated** Create JMS queues automatically; see `auto-create-queues` & `auto-create-addresses` | `true`
[auto-delete-jms-queues](address-settings.md)| **deprecated** Delete JMS queues automatically; see `auto-create-queues` & `auto-create-addresses` | `true`
[auto-create-jms-topics](address-settings.md)| **deprecated** Create JMS topics automatically; see `auto-create-queues` & `auto-create-addresses` | `true`
[auto-delete-jms-topics](address-settings.md)| **deprecated** Delete JMS topics automatically; see `auto-create-queues` & `auto-create-addresses` | `true`
[auto-create-queues](address-settings.md) | Create queues automatically | `true`
[auto-delete-queues](address-settings.md) | Delete auto-created queues automatically | `true`
[auto-delete-created-queues](address-settings.md) | Delete created queues automatically | `false`
[auto-delete-queues-delay](address-settings.md) | Delay for deleting auto-created queues | 0
[auto-delete-queues-message-count](address-settings.md) | Message count the queue must be at or below before it can be auto deleted | 0
[config-delete-queues](config-reload.md)| How to deal with queues deleted from XML at runtime| `OFF`
[auto-create-addresses](address-model.md#configuring-addresses-and-queues-via-address-settings) | Create addresses automatically | `true`
[auto-delete-addresses](address-model.md#configuring-addresses-and-queues-via-address-settings) | Delete auto-created addresses automatically | `true`
[auto-delete-addresses-delay](address-model.md#configuring-addresses-and-queues-via-address-settings) | Delay for deleting auto-created addresses | 0
[auto-create-addresses](address-settings.md) | Create addresses automatically | `true`
[auto-delete-addresses](address-settings.md) | Delete auto-created addresses automatically | `true`
[auto-delete-addresses-delay](address-settings.md) | Delay for deleting auto-created addresses | 0
[config-delete-addresses](config-reload.md) | How to deal with addresses deleted from XML at runtime | `OFF`
[config-delete-diverts](config-reload.md) | How to deal with diverts deleted from XML at runtime | `OFF`
[management-browse-page-size]() | Number of messages a management resource can browse| 200

View File

@ -16,7 +16,7 @@ API is simpler than the JMS API, since we remove distinctions between queues,
topics and subscriptions. We'll discuss each of the major core messaging
concepts in turn, but to see the API in detail please consult the Javadoc.
Also refer to the [addressing model](address-model.md) chapter for a high-level
Also refer to the [address model](address-model.md) chapter for a high-level
overview of these concepts as well as configuration details.
### Message

View File

@ -0,0 +1,910 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="1050.8998"
height="289.59723"
viewBox="0 0 278.0504 76.622603"
version="1.1"
id="svg8"
sodipodi:docname="anycast.svg"
inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)"
inkscape:export-filename="/home/jbertram/Desktop/diagram/anycast.png"
inkscape:export-xdpi="93.542694"
inkscape:export-ydpi="93.542694">
<defs
id="defs2">
<marker
inkscape:stockid="Arrow2Lend"
orient="auto"
refY="0"
refX="0"
id="marker5205"
style="overflow:visible"
inkscape:isstock="true">
<path
id="path5203"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:isstock="true"
style="overflow:visible"
id="marker5026"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow2Lend"
inkscape:collect="always">
<path
transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
id="path5024"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="Arrow2Lend"
orient="auto"
refY="0"
refX="0"
id="marker4948"
style="overflow:visible"
inkscape:isstock="true"
inkscape:collect="always">
<path
id="path4946"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="Arrow2Lend"
orient="auto"
refY="0"
refX="0"
id="marker7781"
style="overflow:visible"
inkscape:isstock="true"
inkscape:collect="always">
<path
id="path7779"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
inkscape:connector-curvature="0" />
</marker>
<linearGradient
osb:paint="solid"
id="linearGradient6065">
<stop
id="stop6063"
offset="0"
style="stop-color:#ffffff;stop-opacity:1;" />
</linearGradient>
<filter
id="filter5529-2"
inkscape:label="Drop Shadow"
style="color-interpolation-filters:sRGB">
<feFlood
id="feFlood5519-5"
result="flood"
flood-color="rgb(0,0,0)"
flood-opacity="0.498039" />
<feComposite
id="feComposite5521-4"
result="composite1"
operator="in"
in2="SourceGraphic"
in="flood" />
<feGaussianBlur
id="feGaussianBlur5523-4"
result="blur"
stdDeviation="0.2"
in="composite1" />
<feOffset
id="feOffset5525-9"
result="offset"
dy="1"
dx="1" />
<feComposite
id="feComposite5527-9"
result="composite2"
operator="over"
in2="offset"
in="SourceGraphic" />
</filter>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="2.9555625"
inkscape:cx="392.55245"
inkscape:cy="188.0961"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
showgrid="true"
inkscape:snap-object-midpoints="true"
inkscape:snap-to-guides="true"
inkscape:snap-grids="true"
units="px"
inkscape:connector-spacing="0"
inkscape:snap-midpoints="true"
inkscape:snap-bbox="true"
inkscape:window-width="3840"
inkscape:window-height="2056"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:snap-global="false">
<inkscape:grid
type="xygrid"
id="grid14528" />
</sodipodi:namedview>
<metadata
id="metadata5">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-9.3889286,-56.52659)">
<rect
id="rect6098"
width="135.59023"
height="75.48494"
x="70.973747"
y="57.095421"
style="fill:none;stroke:#000000;stroke-width:1.13766205;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
inkscape:transform-center-x="-0.64669425"
inkscape:transform-center-y="14.153426" />
<g
id="g14865">
<g
transform="matrix(0.06217178,-0.0358949,0.0358949,0.06217178,35.404192,80.68931)"
style="display:inline;fill:none;fill-opacity:1;stroke:#737373;stroke-opacity:1"
id="g848">
<path
style="fill:none;fill-opacity:1;stroke:#737373;stroke-width:4.08199978;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 37.797618,159.98364 43.544066,-37.68631 13.34135,10.63045 13.341346,-10.63045 43.54406,37.68631"
id="path837"
inkscape:connector-curvature="0" />
<rect
id="rect18-30"
width="113.77083"
height="72.382446"
x="37.797619"
y="87.601196"
style="display:inline;fill:none;fill-opacity:1;stroke:#737373;stroke-width:3.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
style="display:inline;fill:none;fill-opacity:1;stroke:#737373;stroke-width:4.08199978;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 37.797618,87.601196 94.683034,132.92778 151.56845,87.601196"
id="path4533-3"
inkscape:connector-curvature="0" />
</g>
<g
transform="translate(-15.270238,0.43467262)"
id="g6823">
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:10.58333302px;line-height:1.25;font-family:Ubuntu;-inkscape-font-specification:'Ubuntu Bold';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
x="23.8125"
y="97.806541"
id="text6090"><tspan
sodipodi:role="line"
id="tspan6088"
x="23.8125"
y="97.806541"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:Ubuntu;-inkscape-font-specification:'Ubuntu Bold';stroke-width:0.26458332">Producer</tspan><tspan
sodipodi:role="line"
x="23.8125"
y="111.03571"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:Ubuntu;-inkscape-font-specification:'Ubuntu Bold';stroke-width:0.26458332"
id="tspan6092" /></text>
<text
xml:space="preserve"
style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif Italic';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
x="24.36978"
y="105.17709"
id="text6096"><tspan
sodipodi:role="line"
id="tspan6094"
x="24.36978"
y="105.17709"
style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Italic';stroke-width:0.26458332">address.foo</tspan></text>
</g>
<text
id="text7135"
y="87.029099"
x="44.08987"
style="font-style:normal;font-weight:normal;font-size:5.64444447px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
xml:space="preserve"><tspan
style="font-size:5.64444447px;stroke-width:0.26458332"
y="87.029099"
x="44.08987"
id="tspan7133"
sodipodi:role="line">5</tspan></text>
</g>
<g
id="g14818">
<g
transform="matrix(0.06217178,-0.0358949,0.0358949,0.06217178,265.56122,98.951598)"
style="display:inline;fill:none;fill-opacity:1;stroke:#737373;stroke-opacity:1"
id="g848-1">
<path
style="fill:none;fill-opacity:1;stroke:#737373;stroke-width:4.08199978;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 37.797618,159.98364 43.544066,-37.68631 13.34135,10.63045 13.341346,-10.63045 43.54406,37.68631"
id="path837-3"
inkscape:connector-curvature="0" />
<rect
id="rect18-30-1"
width="113.77083"
height="72.382446"
x="37.797619"
y="87.601196"
style="display:inline;fill:none;fill-opacity:1;stroke:#737373;stroke-width:3.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
style="display:inline;fill:none;fill-opacity:1;stroke:#737373;stroke-width:4.08199978;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 37.797618,87.601196 94.683034,132.92778 151.56845,87.601196"
id="path4533-3-1"
inkscape:connector-curvature="0" />
</g>
<g
transform="matrix(0.06217178,-0.0358949,0.0358949,0.06217178,265.56122,65.649984)"
style="display:inline;fill:none;fill-opacity:1;stroke:#737373;stroke-opacity:1"
id="g848-9">
<path
style="fill:none;fill-opacity:1;stroke:#737373;stroke-width:4.08199978;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 37.797618,159.98364 43.544066,-37.68631 13.34135,10.63045 13.341346,-10.63045 43.54406,37.68631"
id="path837-9"
inkscape:connector-curvature="0" />
<rect
id="rect18-30-0"
width="113.77083"
height="72.382446"
x="37.797619"
y="87.601196"
style="display:inline;fill:none;fill-opacity:1;stroke:#737373;stroke-width:3.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
style="display:inline;fill:none;fill-opacity:1;stroke:#737373;stroke-width:4.08199978;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 37.797618,87.601196 94.683034,132.92778 151.56845,87.601196"
id="path4533-3-8"
inkscape:connector-curvature="0" />
</g>
<g
transform="translate(205.09069,-16.184583)"
id="g6823-2">
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:10.58333302px;line-height:1.25;font-family:Ubuntu;-inkscape-font-specification:'Ubuntu Bold';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
x="23.8125"
y="97.806541"
id="text6090-1"><tspan
sodipodi:role="line"
id="tspan6088-0"
x="23.8125"
y="97.806541"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:Ubuntu;-inkscape-font-specification:'Ubuntu Bold';stroke-width:0.26458332">Consumer 1</tspan><tspan
id="tspan7002"
sodipodi:role="line"
x="23.8125"
y="111.03571"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:Ubuntu;-inkscape-font-specification:'Ubuntu Bold';stroke-width:0.26458332" /><tspan
sodipodi:role="line"
x="23.8125"
y="124.26488"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:Ubuntu;-inkscape-font-specification:'Ubuntu Bold';stroke-width:0.26458332"
id="tspan6092-5" /></text>
<text
xml:space="preserve"
style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif Italic';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
x="24.36978"
y="105.17709"
id="text6096-1"><tspan
sodipodi:role="line"
id="tspan6094-1"
x="24.36978"
y="105.17709"
style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Italic';stroke-width:0.26458332">q1</tspan></text>
</g>
<text
id="text7135-0"
y="71.768509"
x="274.26361"
style="font-style:normal;font-weight:normal;font-size:5.64444447px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
xml:space="preserve"><tspan
style="font-size:5.64444447px;stroke-width:0.26458332"
y="71.768509"
x="274.26361"
id="tspan7133-2"
sodipodi:role="line">1</tspan></text>
<g
transform="translate(205.09069,18.589226)"
id="g6823-2-0">
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:10.58333302px;line-height:1.25;font-family:Ubuntu;-inkscape-font-specification:'Ubuntu Bold';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
x="23.8125"
y="97.806541"
id="text6090-1-8"><tspan
sodipodi:role="line"
id="tspan6088-0-5"
x="23.8125"
y="97.806541"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:Ubuntu;-inkscape-font-specification:'Ubuntu Bold';stroke-width:0.26458332">Consumer 2</tspan><tspan
sodipodi:role="line"
x="23.8125"
y="111.03571"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:Ubuntu;-inkscape-font-specification:'Ubuntu Bold';stroke-width:0.26458332"
id="tspan6092-5-0" /></text>
<text
xml:space="preserve"
style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif Italic';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
x="24.36978"
y="105.17709"
id="text6096-1-6"><tspan
id="tspan7004"
sodipodi:role="line"
x="24.36978"
y="105.17709"
style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Italic';stroke-width:0.26458332">q1</tspan></text>
</g>
<text
id="text7135-1"
y="105.35093"
x="274.15298"
style="font-style:normal;font-weight:normal;font-size:5.64444447px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
xml:space="preserve"><tspan
style="font-size:5.64444447px;stroke-width:0.26458332"
y="105.35093"
x="274.15298"
id="tspan7133-0"
sodipodi:role="line">2</tspan></text>
</g>
<g
id="g14851">
<g
transform="translate(8.334375,5.0270833)"
id="g8513">
<rect
style="fill:none;stroke:#000000;stroke-width:0.9379037;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect6825"
width="46.581741"
height="13.759413"
x="73.617912"
y="97.806267" />
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:1.25;font-family:Ubuntu;-inkscape-font-specification:Ubuntu;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332;"
x="74.899323"
y="104.98775"
id="text6829"><tspan
sodipodi:role="line"
id="tspan6827"
x="74.899323"
y="104.98775"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;font-family:Ubuntu;-inkscape-font-specification:Ubuntu;stroke-width:0.26458332;">address.foo</tspan></text>
<text
xml:space="preserve"
style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93888903px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif Italic';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
x="75.120499"
y="109.63036"
id="text7309"><tspan
sodipodi:role="line"
id="tspan7307"
x="75.120499"
y="109.63036"
style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93888903px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Italic';stroke-width:0.26458332">anycast</tspan></text>
</g>
</g>
<path
style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.19798134;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker7781)"
d="m 106.13101,102.96086 v -5.523177 h 39.83833"
id="path7410"
inkscape:connector-curvature="0" />
<g
id="layer2-3"
inkscape:label="Layer 2"
style="display:inline"
transform="matrix(0.43046721,0,0,0.43046721,55.110218,11.154311)">
<g
id="g5073-6"
style="filter:url(#filter5529-2)"
inkscape:export-xdpi="49.963245"
inkscape:export-ydpi="49.963245">
<path
inkscape:transform-center-x="3.3564472e-06"
d="m 64.697193,153.55181 -8.351848,-0.0491 -4.133392,-7.25747 4.218456,-7.20836 8.351848,0.0491 4.133392,7.25746 z"
inkscape:randomized="0"
inkscape:rounded="0"
inkscape:flatsided="true"
sodipodi:arg2="1.5766766"
sodipodi:arg1="1.0530778"
sodipodi:r2="6.0473599"
sodipodi:r1="8.3519926"
sodipodi:cy="146.29434"
sodipodi:cx="60.563801"
sodipodi:sides="6"
id="path4883-0"
style="fill:#ffffff;stroke-width:0.3946985;stroke-miterlimit:4;stroke-dasharray:none"
sodipodi:type="star" />
<path
inkscape:transform-center-x="3.3564472e-06"
d="m 52.632137,146.55309 -8.351848,-0.0491 -4.133392,-7.25747 4.218456,-7.20835 8.351848,0.0491 4.133392,7.25747 z"
inkscape:randomized="0"
inkscape:rounded="0"
inkscape:flatsided="true"
sodipodi:arg2="1.5766766"
sodipodi:arg1="1.0530778"
sodipodi:r2="6.0473604"
sodipodi:r1="8.3519926"
sodipodi:cy="139.29562"
sodipodi:cx="48.498745"
sodipodi:sides="6"
id="path4883-4-5"
style="display:inline;fill:#ffffff;stroke-width:0.3946985;stroke-miterlimit:4;stroke-dasharray:none"
sodipodi:type="star" />
<path
inkscape:transform-center-x="3.3564472e-06"
d="m 64.771263,139.58889 -8.351848,-0.0491 -4.133392,-7.25747 4.218455,-7.20836 8.351849,0.0491 4.133392,7.25747 z"
inkscape:randomized="0"
inkscape:rounded="0"
inkscape:flatsided="true"
sodipodi:arg2="1.5766766"
sodipodi:arg1="1.0530778"
sodipodi:r2="6.0473609"
sodipodi:r1="8.3519926"
sodipodi:cy="132.33142"
sodipodi:cx="60.637871"
sodipodi:sides="6"
id="path4883-4-2-02"
style="display:inline;fill:#ffffff;stroke-width:0.3946985;stroke-miterlimit:4;stroke-dasharray:none"
sodipodi:type="star" />
<path
inkscape:transform-center-x="3.3564472e-06"
d="m 64.765488,125.70228 -8.351849,-0.0491 -4.133392,-7.25747 4.218456,-7.20836 8.351848,0.0491 4.133393,7.25747 z"
inkscape:randomized="0"
inkscape:rounded="0"
inkscape:flatsided="true"
sodipodi:arg2="1.5766766"
sodipodi:arg1="1.0530778"
sodipodi:r2="6.0473609"
sodipodi:r1="8.3519926"
sodipodi:cy="118.44481"
sodipodi:cx="60.632095"
sodipodi:sides="6"
id="path4883-4-2-0-9"
style="display:inline;fill:#ffffff;stroke-width:0.3946985;stroke-miterlimit:4;stroke-dasharray:none"
sodipodi:type="star" />
<path
inkscape:transform-center-x="3.3564472e-06"
d="m 52.696037,132.67611 -8.351848,-0.0491 -4.133392,-7.25747 4.218456,-7.20836 8.351848,0.0491 4.133392,7.25747 z"
inkscape:randomized="0"
inkscape:rounded="0"
inkscape:flatsided="true"
sodipodi:arg2="1.5766766"
sodipodi:arg1="1.0530778"
sodipodi:r2="6.0473609"
sodipodi:r1="8.3519926"
sodipodi:cy="125.41864"
sodipodi:cx="48.562645"
sodipodi:sides="6"
id="path4883-4-2-0-0-4"
style="display:inline;fill:#ffffff;stroke-width:0.3946985;stroke-miterlimit:4;stroke-dasharray:none"
sodipodi:type="star" />
</g>
</g>
<g
id="layer1-35"
inkscape:label="Layer 1"
style="display:inline"
transform="matrix(0.43046721,0,0,0.43046721,55.110218,11.154311)">
<path
inkscape:export-ydpi="49.963245"
inkscape:export-xdpi="49.963245"
transform="matrix(0.0720575,0.01553345,-0.01553345,0.0720575,-59.031055,63.795776)"
d="m 1849.1387,640.35252 -96.8242,20.55802 -66.2158,-73.57316 30.6083,-94.13118 96.8242,-20.55802 66.2158,73.57316 z"
inkscape:randomized="0"
inkscape:rounded="0"
inkscape:flatsided="true"
sodipodi:arg2="1.36158"
sodipodi:arg1="0.83798123"
sodipodi:r2="49.49128"
sodipodi:r1="98.982559"
sodipodi:cy="566.77936"
sodipodi:cx="1782.9229"
sodipodi:sides="6"
id="path5019-02-9-1"
style="opacity:1;fill:#c12766;fill-opacity:1;stroke:none;stroke-width:3;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
sodipodi:type="star" />
<path
inkscape:export-ydpi="49.963245"
inkscape:export-xdpi="49.963245"
transform="matrix(0.0720575,0.01553345,-0.01553345,0.0720575,-71.170179,70.759985)"
d="m 1849.1387,640.35252 -96.8242,20.55802 -66.2158,-73.57316 30.6083,-94.13118 96.8242,-20.55802 66.2158,73.57316 z"
inkscape:randomized="0"
inkscape:rounded="0"
inkscape:flatsided="true"
sodipodi:arg2="1.36158"
sodipodi:arg1="0.83798123"
sodipodi:r2="49.49128"
sodipodi:r1="98.982559"
sodipodi:cy="566.77936"
sodipodi:cx="1782.9229"
sodipodi:sides="6"
id="path5019-0-5-1-7"
style="opacity:1;fill:#3e489f;fill-opacity:1;stroke:none;stroke-width:15;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
sodipodi:type="star" />
<path
inkscape:export-ydpi="49.963245"
inkscape:export-xdpi="49.963245"
inkscape:transform-center-y="-96.786465"
inkscape:transform-center-x="198.10335"
transform="matrix(0.0720575,0.01553345,-0.01553345,0.0720575,-59.10649,77.758293)"
d="m 1849.1387,640.35252 -96.8242,20.55802 -66.2158,-73.57316 30.6083,-94.13118 96.8242,-20.55802 66.2158,73.57316 z"
inkscape:randomized="0"
inkscape:rounded="0"
inkscape:flatsided="true"
sodipodi:arg2="1.36158"
sodipodi:arg1="0.83798123"
sodipodi:r2="49.49128"
sodipodi:r1="98.982559"
sodipodi:cy="566.77936"
sodipodi:cx="1782.9229"
sodipodi:sides="6"
id="path5019-4-1-2-4"
style="opacity:1;fill:#714099;fill-opacity:1;stroke:none;stroke-width:3;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
sodipodi:type="star" />
<path
inkscape:export-ydpi="49.963245"
inkscape:export-xdpi="49.963245"
transform="matrix(0.0720575,0.01553345,-0.01553345,0.0720575,-71.106281,56.88299)"
d="m 1849.1387,640.35252 -96.8242,20.55802 -66.2158,-73.57316 30.6083,-94.13118 96.8242,-20.55802 66.2158,73.57316 z"
inkscape:randomized="0"
inkscape:rounded="0"
inkscape:flatsided="true"
sodipodi:arg2="1.36158"
sodipodi:arg1="0.83798123"
sodipodi:r2="49.49128"
sodipodi:r1="98.982559"
sodipodi:cy="566.77936"
sodipodi:cx="1782.9229"
sodipodi:sides="6"
id="path5019-0-4-9-8-3"
style="opacity:1;fill:#78932c;fill-opacity:1;stroke:none;stroke-width:3;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
sodipodi:type="star" />
<path
inkscape:export-ydpi="49.963245"
inkscape:export-xdpi="49.963245"
transform="matrix(0.0720575,0.01553345,-0.01553345,0.0720575,-59.036828,49.909167)"
d="m 1849.1387,640.35252 -96.8242,20.55802 -66.2158,-73.57316 30.6083,-94.13118 96.8242,-20.55802 66.2158,73.57316 z"
inkscape:randomized="0"
inkscape:rounded="0"
inkscape:flatsided="true"
sodipodi:arg2="1.36158"
sodipodi:arg1="0.83798123"
sodipodi:r2="49.49128"
sodipodi:r1="98.982559"
sodipodi:cy="566.77936"
sodipodi:cx="1782.9229"
sodipodi:sides="6"
id="path5019-0-0-7-9-1"
style="opacity:1;fill:#cf242a;fill-opacity:1;stroke:none;stroke-width:3;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
sodipodi:type="star" />
<circle
inkscape:export-ydpi="49.963245"
inkscape:export-xdpi="49.963245"
cy="146.29434"
cx="60.563801"
id="path5553-7-4"
style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.32007113;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
r="1.6003556" />
<path
inkscape:export-ydpi="49.963245"
inkscape:export-xdpi="49.963245"
inkscape:connector-curvature="0"
inkscape:connector-type="polyline"
id="path5592-6"
d="M 61.747657,117.71039 47.48079,125.88424"
style="fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.52375275;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
inkscape:export-ydpi="49.963245"
inkscape:export-xdpi="49.963245"
inkscape:connector-curvature="0"
inkscape:connector-type="polyline"
id="path5592-7-9"
d="m 48.513627,124.19675 0.04811,16.44242"
style="fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.52375275;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
inkscape:export-ydpi="49.963245"
inkscape:export-xdpi="49.963245"
inkscape:connector-curvature="0"
inkscape:connector-type="polyline"
id="path5592-7-1-4"
d="m 47.524519,138.71468 14.136453,8.39741"
style="fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.52375275;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
inkscape:export-ydpi="49.963245"
inkscape:export-xdpi="49.963245"
inkscape:connector-curvature="0"
inkscape:connector-type="polyline"
id="path5592-7-7-2"
d="m 60.590101,117.13251 0.04811,16.44242"
style="fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.52375275;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
inkscape:export-ydpi="49.963245"
inkscape:export-xdpi="49.963245"
inkscape:connector-curvature="0"
inkscape:connector-type="polyline"
id="path5592-7-4-2"
d="m 60.657374,131.09278 0.04811,16.44242"
style="fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.52380002;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
inkscape:export-ydpi="49.963245"
inkscape:export-xdpi="49.963245"
inkscape:connector-curvature="0"
inkscape:connector-type="polyline"
id="path5592-5-6"
d="m 61.76555,131.70801 -14.266867,8.17386"
style="fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.52375275;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
inkscape:export-ydpi="49.963245"
inkscape:export-xdpi="49.963245"
inkscape:connector-curvature="0"
inkscape:connector-type="polyline"
id="path5592-7-1-3-4"
d="m 47.56389,124.84086 14.136453,8.39741"
style="fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.52375275;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:0.99120963px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.08260079px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="72.334419"
y="139.11192"
id="text5093-1-4-1"
inkscape:export-xdpi="49.963245"
inkscape:export-ydpi="49.963245"><tspan
style="font-size:18.19531631px;line-height:1.25;fill:#000000;stroke-width:0.08260079px"
sodipodi:role="line"
id="tspan5095-3-6-2"
x="72.334419"
y="139.11192"><tspan
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#000000;fill-opacity:1;stroke-width:0.08260079px"
id="tspan5097-1-4-8">ACTIVE</tspan></tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:0.99120963px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.08260079px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="74.97496"
y="123.50168"
id="text6938-4-8"
inkscape:export-xdpi="49.963245"
inkscape:export-ydpi="49.963245"><tspan
style="font-size:7.49208975px;line-height:1.25;fill:#000000;stroke-width:0.08260079px"
sodipodi:role="line"
id="tspan6940-1-9"
x="74.97496"
y="123.50168">APACHE</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:0.99120963px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#c12766;fill-opacity:1;stroke:none;stroke-width:0.08260079px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="145.23894"
y="139.11192"
id="text5093-1-4-2-8-9-4-2"
inkscape:export-xdpi="49.963245"
inkscape:export-ydpi="49.963245"><tspan
sodipodi:role="line"
id="tspan5095-3-6-5-5-6-3-8"
x="145.23894"
y="139.11192"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:18.19531631px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';stroke-width:0.08260079px">MQ</tspan></text>
<text
id="text3960-8"
y="126.94642"
x="176.92981"
style="font-style:normal;font-weight:normal;font-size:4.23333359px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.08476129"
xml:space="preserve"
inkscape:export-xdpi="49.963245"
inkscape:export-ydpi="49.963245"><tspan
style="font-size:4.23333359px;fill:#000000;stroke-width:0.08476129"
y="126.94642"
x="176.92981"
id="tspan3958-8"
sodipodi:role="line">®</tspan></text>
<circle
inkscape:export-ydpi="49.963245"
inkscape:export-xdpi="49.963245"
cy="139.24219"
cx="48.333706"
id="path5553-7-1-6"
style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.32007113;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
r="1.6003556" />
<circle
inkscape:export-ydpi="49.963245"
inkscape:export-xdpi="49.963245"
cy="132.48586"
cx="60.901413"
id="path5553-7-3-8"
style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.32007113;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
r="1.6003556" />
<circle
inkscape:export-ydpi="49.963245"
inkscape:export-xdpi="49.963245"
cy="125.41864"
cx="48.562645"
id="path5553-7-0-3"
style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.32007113;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
r="1.6003556" />
<circle
inkscape:export-ydpi="49.963245"
inkscape:export-xdpi="49.963245"
cy="118.44482"
cx="60.632095"
id="path5553-7-39-8"
style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.32007113;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
r="1.6003556" />
</g>
<path
style="fill:none;stroke:#000000;stroke-width:0.198;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker4948)"
d="M 188.78021,91.418413 V 78.321538 h 37.43854"
id="path9314"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:0.19800001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker5026)"
d="m 188.90156,104.28616 v 9.19122 h 37.60067"
id="path5016"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:0.198;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker5205)"
d="m 55.725697,95.745707 h 10.557145 v 13.630743 h 14.56619"
id="path5195"
inkscape:connector-curvature="0" />
<g
id="g14843">
<g
transform="matrix(0.06217178,-0.0358949,0.0358949,0.06217178,167.26775,93.938451)"
style="display:inline;fill:none;fill-opacity:1;stroke:#737373;stroke-opacity:1"
id="g848-2">
<path
style="fill:none;fill-opacity:1;stroke:#737373;stroke-width:4.08199978;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 37.797618,159.98364 43.544066,-37.68631 13.34135,10.63045 13.341346,-10.63045 43.54406,37.68631"
id="path837-8"
inkscape:connector-curvature="0" />
<rect
id="rect18-30-4"
width="113.77083"
height="72.382446"
x="37.797619"
y="87.601196"
style="display:inline;fill:none;fill-opacity:1;stroke:#737373;stroke-width:3.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
style="display:inline;fill:none;fill-opacity:1;stroke:#737373;stroke-width:4.08199978;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 37.797618,87.601196 94.683034,132.92778 151.56845,87.601196"
id="path4533-3-7"
inkscape:connector-curvature="0" />
</g>
<g
transform="matrix(0.06217178,-0.0358949,0.0358949,0.06217178,178.36829,93.66989)"
style="display:inline;fill:none;fill-opacity:1;stroke:#737373;stroke-opacity:1"
id="g848-24">
<path
style="fill:none;fill-opacity:1;stroke:#737373;stroke-width:4.08199978;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 37.797618,159.98364 43.544066,-37.68631 13.34135,10.63045 13.341346,-10.63045 43.54406,37.68631"
id="path837-0"
inkscape:connector-curvature="0" />
<rect
id="rect18-30-6"
width="113.77083"
height="72.382446"
x="37.797619"
y="87.601196"
style="display:inline;fill:none;fill-opacity:1;stroke:#737373;stroke-width:3.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
style="display:inline;fill:none;fill-opacity:1;stroke:#737373;stroke-width:4.08199978;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 37.797618,87.601196 94.683034,132.92778 151.56845,87.601196"
id="path4533-3-2"
inkscape:connector-curvature="0" />
</g>
<text
id="text7135-04"
y="99.971115"
x="187.19398"
style="font-style:normal;font-weight:normal;font-size:5.64444447px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
xml:space="preserve"><tspan
style="font-size:5.64444447px;stroke-width:0.26458332"
y="99.971115"
x="187.19398"
id="tspan7133-22"
sodipodi:role="line">3</tspan><tspan
style="font-size:5.64444447px;stroke-width:0.26458332"
y="107.02667"
x="187.19398"
sodipodi:role="line"
id="tspan7302" /></text>
<text
id="text7135-4"
y="99.971115"
x="175.68803"
style="font-style:normal;font-weight:normal;font-size:5.64444447px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
xml:space="preserve"><tspan
style="font-size:5.64444447px;stroke-width:0.26458332"
y="99.971115"
x="175.68803"
id="tspan7133-09"
sodipodi:role="line">4</tspan></text>
<g
transform="translate(19.88054,5.7352909)"
id="g8519">
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:1.25;font-family:Ubuntu;-inkscape-font-specification:Ubuntu;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
x="132.71318"
y="78.264839"
id="text6840"><tspan
sodipodi:role="line"
x="132.71318"
y="78.264839"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;font-family:Ubuntu;-inkscape-font-specification:Ubuntu;stroke-width:0.26458332"
id="tspan6842">q1</tspan></text>
<text
xml:space="preserve"
style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93888903px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif Italic';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
x="132.8999"
y="83.37825"
id="text7309-1"><tspan
sodipodi:role="line"
id="tspan7307-9"
x="132.8999"
y="83.37825"
style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93888903px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Italic';stroke-width:0.26458332">anycast</tspan></text>
</g>
<g
id="g12174">
<ellipse
style="fill:none;fill-opacity:1;stroke:#00000d;stroke-width:0.62099993;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.97864769;paint-order:markers fill stroke"
id="path5311"
cx="150.32578"
cy="97.646393"
rx="3.6896217"
ry="6.3571329" />
<path
style="fill:none;stroke:#000000;stroke-width:0.62099999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 150.33806,91.296613 h 40.04857 z"
id="path5864"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:0.62099999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 150.32578,104.0041 h 40.10183 z"
id="path5864-8"
inkscape:connector-curvature="0" />
<path
inkscape:connector-curvature="0"
style="fill:none;fill-opacity:1;stroke:#00000d;stroke-width:0.62099999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.97864769;paint-order:markers fill stroke"
d="m 190.25345,91.297386 c 3.00706,0 5.44474,2.845239 5.44474,6.355023 0,3.509791 -2.43768,6.355021 -5.44474,6.355021"
id="path5311-4" />
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 44 KiB

View File

@ -0,0 +1,92 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="210mm"
height="297mm"
viewBox="0 0 210 297"
version="1.1"
id="svg16"
inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)"
sodipodi:docname="envelope.svg"
enable-background="new">
<defs
id="defs10">
<linearGradient
id="linearGradient6065"
osb:paint="solid">
<stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop6063" />
</linearGradient>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="3.959798"
inkscape:cx="274.13053"
inkscape:cy="682.17428"
inkscape:document-units="mm"
inkscape:current-layer="layer3"
showgrid="false"
inkscape:snap-object-midpoints="true"
inkscape:snap-intersection-paths="true"
inkscape:window-width="3840"
inkscape:window-height="2056"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1" />
<metadata
id="metadata13">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:groupmode="layer"
id="layer3"
inkscape:label="Layer 3"
style="display:inline">
<g
id="g848"
style="fill:none;fill-opacity:1;stroke:#737373;stroke-opacity:1"
transform="rotate(-30,94.683033,123.79242)">
<path
inkscape:connector-curvature="0"
id="path837"
d="m 37.797618,159.98364 43.544066,-37.68631 13.34135,10.63045 13.341346,-10.63045 43.54406,37.68631"
style="fill:none;fill-opacity:1;stroke:#737373;stroke-width:4.08199978;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<rect
style="display:inline;fill:none;fill-opacity:1;stroke:#737373;stroke-width:3.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
y="87.601196"
x="37.797619"
height="72.382446"
width="113.77083"
id="rect18" />
<path
inkscape:connector-curvature="0"
id="path4533"
d="M 37.797618,87.601196 94.683034,132.92778 151.56845,87.601196"
style="display:inline;fill:none;fill-opacity:1;stroke:#737373;stroke-width:4.08199978;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.1 KiB

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 52 KiB

View File

@ -0,0 +1,91 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="210mm"
height="297mm"
viewBox="0 0 210 297"
version="1.1"
id="svg5309"
inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)"
sodipodi:docname="queue.svg">
<defs
id="defs5303" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="2.8"
inkscape:cx="273.84106"
inkscape:cy="453.68607"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:snap-bbox="false"
inkscape:bbox-paths="false"
inkscape:bbox-nodes="false"
inkscape:snap-bbox-edge-midpoints="false"
inkscape:snap-bbox-midpoints="false"
inkscape:snap-object-midpoints="false"
inkscape:snap-midpoints="true"
inkscape:snap-center="true"
inkscape:snap-nodes="false"
inkscape:snap-global="false"
inkscape:window-width="3840"
inkscape:window-height="2056"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1" />
<metadata
id="metadata5306">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1">
<g
id="g11770">
<ellipse
ry="26.34794"
rx="15.456253"
cy="167.64032"
cx="38.325054"
id="path5311"
style="fill:none;fill-opacity:1;stroke:#00000d;stroke-width:2.59186125;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.97864769;paint-order:markers fill stroke" />
<path
inkscape:connector-curvature="0"
id="path5864"
d="M 38.359892,141.19121 H 152.02271 Z"
style="fill:none;stroke:#000000;stroke-width:2.42474532;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path5864-8"
d="M 38.325055,194.08945 H 152.139 Z"
style="fill:none;stroke:#000000;stroke-width:2.42635679;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
id="path5311-4"
d="m 151.64473,141.19443 c 8.5344,0 15.45288,11.84405 15.45288,26.45444 0,14.6104 -6.91848,26.45445 -15.45288,26.45445"
style="fill:none;fill-opacity:1;stroke:#00000d;stroke-width:2.4256227;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.97864769;paint-order:markers fill stroke"
inkscape:connector-curvature="0" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.3 KiB

View File

@ -1,10 +1,10 @@
# Exclusive Queues
Exclusive queues are special queues which route all messages to only one
Exclusive queues are special queues which dispatch all messages to only one
consumer at a time.
This is useful when you want all messages to be processed serially by the same
consumer, when a producer does not specify [Message Grouping](message-grouping.md).
This is useful when you want all messages to be processed _serially_ but you
can't or don't want to use [Message Grouping](message-grouping.md).
An example might be orders sent to an address and you need to consume them
in the exact same order they were produced.
@ -13,7 +13,6 @@ Obviously exclusive queues have a draw back that you cannot scale out the
consumers to improve consumption as only one consumer would technically be active.
Here we advise that you look at message groups first.
## Configuring Exclusive Queues
Exclusive queues can be statically configured using the `exclusive` boolean

View File

@ -33,7 +33,7 @@ buffered on each consumer is determined by the `consumerWindowSize`
parameter.
By default, the `consumerWindowSize` is set to 1 MiB (1024 \* 1024
bytes) unless overridden via ([Address Settings](address-model.md#configuring-addresses-and-queues-via-address-settings))
bytes) unless overridden via ([Address Settings](address-settings.md))
The value can be:
@ -172,7 +172,7 @@ but instead pages messages to storage.
To configure an address with a maximum size and tell the server that you
want to block producers for this address if it becomes full, you need to
define an AddressSettings ([Configuring Queues Via Address Settings](address-model.md#configuring-addresses-and-queues-via-address-settings)) block for the address and specify
define an AddressSettings ([Configuring Queues Via Address Settings](address-settings.md)) block for the address and specify
`max-size-bytes` and `address-full-policy`
The address block applies to all queues registered to that address. I.e.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

View File

@ -128,58 +128,8 @@ System.out.format("Received message: %s\n", messageReceived.getText());
## Forcing all consumers to be non-destructive
When a consumer attaches to a queue, the normal behaviour is that messages are
sent to that consumer are acquired exclusively by that consumer, and when the
consumer acknowledges them, the messages are removed from the queue.
Another common pattern is to have queue "browsers" which send all messages to
the browser, but do not prevent other consumers from receiving the messages,
and do not remove them from the queue when the browser is done with them. Such
a browser is an instance of a "non-destructive" consumer.
If every consumer on a queue is non destructive then we can obtain some
interesting behaviours. In the case of a LVQ then the queue will always contain
the most up to date value for every key.
A queue can be created to enforce all consumers are non-destructive for last
value queue. This can be achieved using the following queue configuration:
```xml
<address name="foo.bar">
<multicast>
<queue name="orders1" last-value-key="reuters_code" non-destructive="true" />
</multicast>
</address>
```
Or on auto-create when using the JMS Client by using address parameters when
creating the destination used by the consumer.
```java
Queue queue = session.createQueue("my.destination.name?last-value-key=reuters_code&non-destructive=true");
Topic topic = session.createTopic("my.destination.name?last-value-key=reuters_code&non-destructive=true");
```
Also the default for all queues under and address can be defaulted using the
`address-setting` configuration:
```xml
<address-setting match="lastValueQueue">
<default-last-value-key>reuters_code</default-last-value-key>
<default-non-destructive>true</default-non-destructive>
</address-setting>
```
By default, `default-non-destructive` is `false`.
#### Bounding size using `expiry-delay`
For queues other than LVQs, having only non-destructive consumers could mean
that messages would never get deleted, leaving the queue to grow unconstrained.
To prevent this you can use the ability to set a default `expiry-delay`.
See [expiry-delay](message-expiry.md#configuring-expiry-delay) for more details
on this.
It's common to combine last-value queues with [non-destructive](non-destructive-queues.md)
semantics.
## Clustering

View File

@ -0,0 +1,53 @@
# Non-Destructive Queues
When a consumer attaches to a queue, the normal behaviour is that messages are
sent to that consumer are acquired exclusively by that consumer, and when the
consumer acknowledges them, the messages are removed from the queue.
Another common pattern is to have queue "browsers" which send all messages to
the browser, but do not prevent other consumers from receiving the messages,
and do not remove them from the queue when the browser is done with them. Such
a browser is an instance of a "non-destructive" consumer.
If every consumer on a queue is non destructive then we can obtain some
interesting behaviours. In the case of a [last value
queue](last-value-queues.md) then the queue will always contain the most up to
date value for every key.
A queue can be created to enforce all consumers are non-destructive using the
following queue configuration:
```xml
<address name="foo.bar">
<multicast>
<queue name="orders1" non-destructive="true" />
</multicast>
</address>
```
Or on auto-create when using the JMS client by using address parameters when
creating the destination used by the consumer.
```java
Queue queue = session.createQueue("my.destination.name?non-destructive=true");
Topic topic = session.createTopic("my.destination.name?non-destructive=true");
```
Also the default for all queues under and address can be defaulted using the
`address-setting` configuration:
```xml
<address-setting match="nonDestructiveQueue">
<default-non-destructive>true</default-non-destructive>
</address-setting>
```
By default, `default-non-destructive` is `false`.
## Limiting the Size of the Queue
For queues other than last-value queues, having only non-destructive consumers
could mean that messages would never get deleted, leaving the queue to grow
without constraint. To prevent this you can use the ability to set a default
`expiry-delay`. See [expiry-delay](message-expiry.md#configuring-expiry-delay)
for more details on this. You could also use a [ring queue](ring-queues.md).

View File

@ -235,7 +235,7 @@ Highlights:
- Support for [min/max expiry-delay](message-expiry.md#configuring-expiry-delay)
- [Per-acceptor security domains](security.md#per-acceptor-security-domains)
- Command-line `check` tool for checking the health of a broker
- Support disabling metrics per address via the [`enable-metrics` address setting](address-model.md#configuring-addresses-and-queues-via-address-settings)
- Support disabling metrics per address via the [`enable-metrics` address setting](address-settings.md)
- Improvements to the [audit logging](logging.md#configuring-audit-logging)
- Speed optimizations for the `HierarchicalObjectRepository`, an internal object used to store address and security settings
@ -422,7 +422,7 @@ Highlights:
Highlights:
- Support advanced destination options like `consumersBeforeDispatchStarts` and `timeBeforeDispatchStarts` from 5.x.
- Add support for delays before deleting addresses and queues via [`auto-delete-queues-delay` and `auto-delete-addresses-delay`
Address Settings](address-model.md#configuring-addresses-and-queues-via-address-settings).
Address Settings](address-settings.md).
- Support [logging HTTP access](web-server.md).
- Add a CLI command to purge a queue.
- Support user and role manipulation for PropertiesLoginModule via management interfaces.
@ -432,7 +432,7 @@ Highlights:
- Support [FQQN](address-model.md#specifying-a-fully-qualified-queue-name) for producers.
- Track routed and unrouted messages sent to an address.
- Support [connection pooling in LDAPLoginModule](security.md#ldaploginmodule).
- Support configuring a default consumer window size via [`default-consumer-window-size` Address Setting](address-model.md#configuring-addresses-and-queues-via-address-settings).
- Support configuring a default consumer window size via [`default-consumer-window-size` Address Setting](address-settings.md).
- Support [masking](masking-passwords.md) `key-store-password` and `trust-store-password` in management.xml.
- Support [`JMSXGroupSeq` -1 to close/reset message groups](message-grouping.md#closing-a-message-group) from 5.x.
- Allow configuration of [RMI registry port](management.md#configuring-remote-jmx-access).

View File

@ -6,25 +6,25 @@ settings, address settings and when creating consumers.
The syntax is similar to that used by [AMQP](https://www.amqp.org).
An Apache ActiveMQ Artemis wildcard expression contains words delimited by the character
'`.`' (full stop).
`.` (full stop).
The special characters '`#`' and '`*`' also have special meaning and can
The special characters `#` and `*` also have special meaning and can
take the place of a word.
The character '`#`' means 'match any sequence of zero or more words'.
The character `#` means "match any sequence of zero or more words".
The character '`*`' means 'match a single word'.
The character `*` means "match a single word".
So the wildcard 'news.europe.\#' would match 'news.europe',
'news.europe.sport', 'news.europe.politics', and
'news.europe.politics.regional' but would not match 'news.usa',
'news.usa.sport' nor 'entertainment'.
So the wildcard `news.europe.#` would match `news.europe`,
`news.europe.sport`, `news.europe.politics`, and
`news.europe.politics.regional` but would _not_ match `news.usa`,
`news.usa.sport` or `entertainment`.
The wildcard 'news.\*' would match 'news.europe', but not
'news.europe.sport'.
The wildcard `news.*` would match `news.europe`, but not
`news.europe.sport`.
The wildcard 'news.\*.sport' would match 'news.europe.sport' and also
'news.usa.sport', but not 'news.europe.politics'.
The wildcard `news.*.sport` would match `news.europe.sport` and also
`news.usa.sport`, but not `news.europe.politics`.
## Customizing the Syntax

View File

@ -1634,6 +1634,7 @@
<exclude>docs/**/*.json</exclude>
<exclude>docs/**/_book/</exclude>
<exclude>docs/**/_layouts/</exclude>
<exclude>docs/user-manual/en/diagrams/*.svg</exclude>
<exclude>**/target/</exclude>
<exclude>**/META-INF/services/*</exclude>
<exclude>**/META-INF/MANIFEST.MF</exclude>