本章将带您了解如何使用 Apache ActiveMQ Artemis 服务器。
我们将展示它的位置、如何启动和停止它,以及描述目录布局、所有文件及其功能。
本文档将引用 ActiveMQ 分发文件解压到的目录的完整路径,表示为 ${ARTEMIS_HOME}
。
1. 安装
您可以从 下载 页面获取最新版本。
以下是分发中一些重要文件夹的说明
|___ bin | |___ lib | |___ schema | |___ web
- bin
-
运行 ActiveMQ Artemis 所需的二进制文件和脚本。
- lib
-
运行 ActiveMQ Artemis 所需的 jar 和库。
- schema
-
用于验证 ActiveMQ Artemis 配置文件的 XML 模式。
- web
-
代理运行时加载 Web 上下文的文件夹。
2. 创建代理实例
代理实例是包含所有配置和运行时数据(如日志和消息日志)的目录,这些数据与代理进程相关联。建议您不要在 ${ARTEMIS_HOME}
下创建实例目录。鼓励这种分离,以便在发布 ActiveMQ Artemis 的下一个版本时更轻松地进行升级。
在 Unix 系统上,通常将这种运行时数据存储在 /var/lib
目录下。例如,要在 /var/lib/mybroker
创建一个实例,请在命令行 shell 中运行以下命令
在使用代理之前,必须创建代理实例。此过程需要使用 命令行界面,该界面将在其自己的章节中详细说明。
在以下示例中,将创建一个名为 mybroker
的代理实例
$ cd /var/lib
$ ${ARTEMIS_HOME}/bin/artemis create mybroker
代理实例目录将包含以下子目录
- bin
-
bin
- 包含与该实例相关的执行脚本。
-
data
- 包含用于存储持久消息的数据文件。
-
etc
- lib
-
包含实例配置文件。
- lib
-
包含任何自定义运行时 Java 依赖项,如转换器、插件、拦截器等。
- log
-
包含循环日志文件。
tmp
包含代理运行之间可以安全删除的临时文件。
此时,您可能需要调整 etc
目录中默认配置。
$ ./artemis help create
Usage: artemis create [--aio] [--allow-anonymous] [--autocreate] [--autodelete]
[--backup] [--blocking] [--clustered]
[--disable-persistence] [--failover-on-shutdown]
[--force] [--jdbc] [--linux] [--mapped] [--nio]
[--no-amqp-acceptor] [--no-autocreate] [--no-autotune]
[--no-fsync] [--no-hornetq-acceptor] [--no-mqtt-acceptor]
[--no-stomp-acceptor] [--no-web] [--paging]
[--relax-jolokia] [--replicated] [--require-login]
[--shared-store] [--silent] [--slave]
[--support-advisory]
[--suppress-internal-management-objects]
[--use-client-auth] [--verbose] [--windows]
[--addresses=<addresses>]
[--cluster-password=<clusterPassword>]
[--cluster-user=<clusterUser>] [--data=<data>]
[--default-port=<defaultPort>] [--encoding=<encoding>]
[--etc=<etc>] [--global-max-messages=<globalMaxMessages>]
[--global-max-size=<globalMaxSize>] [--home=<home>]
[--host=<host>] [--http-host=<httpHost>]
[--http-port=<httpPort>] [--java-memory=<javaMemory>]
[--jdbc-bindings-table-name=<jdbcBindings>]
[--jdbc-connection-url=<jdbcURL>]
[--jdbc-driver-class-name=<jdbcClassName>]
[--jdbc-large-message-table-name=<jdbcLargeMessages>]
[--jdbc-lock-expiration=<jdbcLockExpiration>]
[--jdbc-lock-renew-period=<jdbcLockRenewPeriod>]
[--jdbc-message-table-name=<jdbcMessages>]
[--jdbc-network-timeout=<jdbcNetworkTimeout>]
[--jdbc-node-manager-table-name=<jdbcNodeManager>]
[--jdbc-page-store-table-name=<jdbcPageStore>]
[--journal-device-block-size=<journalDeviceBlockSize>]
[--journal-retention=<retentionDays>]
[--journal-retention-max-bytes=<retentionMaxBytes>]
[--max-hops=<maxHops>]
[--message-load-balancing=<messageLoadBalancing>]
[--name=<name>] [--password=<password>] [--ping=<ping>]
[--port-offset=<portOffset>] [--queues=<queues>]
[--role=<role>] [--security-manager=<securityManager>]
[--ssl-key=<sslKey>]
[--ssl-key-password=<sslKeyPassword>]
[--ssl-trust=<sslTrust>]
[--ssl-trust-password=<sslTrustPassword>]
[--staticCluster=<staticNode>] [--user=<user>]
[--java-options=<javaOptions>]... <directory>
Create a new broker instance.
<directory> The instance directory to hold the broker's
configuration and data. Path must be writable.
--addresses=<addresses>
A comma separated list of addresses with the
option to specify a routing type, e.g.
--addresses myAddress1,myAddress2:anycast.
Routing-type default: multicast.
--aio Set the journal as asyncio.
--allow-anonymous Allow connections from users with no security
credentials. Opposite of --require-login.
Default: input.
--autocreate Allow automatic creation of addresses & queues.
Default: true.
--autodelete Allow automatic deletion of addresses & queues.
Default: false.
--backup Be a backup broker. Valid for shared store or
replication.
--blocking Block producers when address becomes full.
Opposite of --paging. Default: false.
--cluster-password=<clusterPassword>
The password to use for clustering. Default: input.
--cluster-user=<clusterUser>
The user to use for clustering. Default: input.
--clustered Enable clustering.
--data=<data> Directory where ActiveMQ data are stored. Paths
can be absolute or relative to artemis.instance
directory. Default: data.
--default-port=<defaultPort>
The port number to use for the main 'artemis'
acceptor. Default: 61616.
--disable-persistence Disable message persistence to the journal
--encoding=<encoding> The encoding that text files should use. Default:
UTF-8.
--etc=<etc> Directory where ActiveMQ configuration is located.
Paths can be absolute or relative to artemis.
instance directory. Default: etc.
--failover-on-shutdown Whether broker shutdown will trigger failover for
clients using the core protocol. Valid only for
shared store. Default: false.
--force Overwrite configuration at destination directory.
--global-max-messages=<globalMaxMessages>
Maximum number of messages that will be accepted
in memory before using address full policy mode.
Default: undefined.
--global-max-size=<globalMaxSize>
Maximum amount of memory which message data may
consume. Default: half of the JVM's max memory.
--home=<home> Directory where ActiveMQ Artemis is installed.
--host=<host> Broker's host name. Default: 0.0.0.0 or input if
clustered).
--http-host=<httpHost> Embedded web server's host name. Default:
localhost.
--http-port=<httpPort> Embedded web server's port. Default: 8161.
--java-memory=<javaMemory>
Define the -Xmx memory parameter for the broker.
Default: 2G.
--java-options=<javaOptions>
Extra Java options to be passed to the profile.
--jdbc Store message data in JDBC instead of local files.
--jdbc-bindings-table-name=<jdbcBindings>
Name of the jdbc bindings table.
--jdbc-connection-url=<jdbcURL>
The URL used for the database connection.
--jdbc-driver-class-name=<jdbcClassName>
JDBC driver classname.
--jdbc-large-message-table-name=<jdbcLargeMessages>
Name of the large messages table.
--jdbc-lock-expiration=<jdbcLockExpiration>
Lock expiration (in milliseconds).
--jdbc-lock-renew-period=<jdbcLockRenewPeriod>
Lock Renew Period (in milliseconds).
--jdbc-message-table-name=<jdbcMessages>
Name of the jdbc messages table.
--jdbc-network-timeout=<jdbcNetworkTimeout>
Network timeout (in milliseconds).
--jdbc-node-manager-table-name=<jdbcNodeManager>
Name of the jdbc node manager table.
--jdbc-page-store-table-name=<jdbcPageStore>
Name of the page store messages table.
--journal-device-block-size=<journalDeviceBlockSize>
The block size of the journal's storage device.
Default: 4096.
--journal-retention=<retentionDays>
Configure journal retention in days. If > 0 then
enable journal-retention-directory from broker.
xml allowing replay options.
--journal-retention-max-bytes=<retentionMaxBytes>
Maximum number of bytes to keep in the retention
directory.
--linux, --cygwin Force Linux or Cygwin script creation. Default:
based on your actual system.
--mapped Set the journal as mapped.
--max-hops=<maxHops> Number of hops on the cluster configuration.
--message-load-balancing=<messageLoadBalancing>
Message load balancing policy for cluster.
Default: ON_DEMAND. Valid values: ON_DEMAND,
STRICT, OFF, OFF_WITH_REDISTRIBUTION.
--name=<name> The name of the broker. Default: same as host name.
--nio Set the journal as nio.
--no-amqp-acceptor Disable the AMQP specific acceptor.
--no-autocreate Disable auto creation for addresses & queues.
--no-autotune Disable auto tuning of the journal-buffer-timeout
in broker.xml.
--no-fsync Disable usage of fdatasync (channel.force(false)
from Java NIO) on the journal.
--no-hornetq-acceptor Disable the HornetQ specific acceptor.
--no-mqtt-acceptor Disable the MQTT specific acceptor.
--no-stomp-acceptor Disable the STOMP specific acceptor.
--no-web Whether to omit the web-server definition from
bootstrap.xml.
--paging Page messages to disk when address becomes full.
Opposite of --blocking. Default: true.
--password=<password> The user's password. Default: input.
--ping=<ping> A comma separated string to be passed on to the
broker config as network-check-list. The broker
will shutdown when all these addresses are
unreachable.
--port-offset=<portOffset>
How much to off-set the ports of every acceptor.
--queues=<queues> A comma separated list of queues with the option
to specify a routing type, e.g. --queues
myQueue1,myQueue2:multicast. Routing-type
default: anycast.
--relax-jolokia Disable strict checking in jolokia-access.xml.
--replicated Enable broker replication.
--require-login Require security credentials from users for
connection. Opposite of --allow-anonymous.
--role=<role> The name for the role created. Default: amq.
--security-manager=<securityManager>
Which security manager to use - jaas or basic.
Default: jaas.
--shared-store Enable broker shared store.
--silent Disable all the inputs, and make a best guess for
any required input.
--slave Deprecated for removal. Use 'backup' instead.
--ssl-key=<sslKey> Embedded web server's key store path.
--ssl-key-password=<sslKeyPassword>
The key store's password.
--ssl-trust=<sslTrust> The trust store path in case of client
authentication.
--ssl-trust-password=<sslTrustPassword>
The trust store's password.
--staticCluster, --static-cluster=<staticNode>
Cluster node connectors list separated by comma, e.
g. "tcp://server:61616,tcp://server2:61616,tcp:
//server3:61616".
--support-advisory Support advisory messages for the OpenWire
protocol.
--suppress-internal-management-objects
Do not register any advisory addresses/queues for
the OpenWire protocol with the broker's
management service.
--use-client-auth Require client certificate authentication when
connecting to the embedded web server.
--user=<user> The username. Default: input.
--verbose Print additional information.
--windows Force Windows script creation. Default: based on
your actual system.
$ ./artemis create /usr/server
Creating ActiveMQ Artemis instance at: /usr/server
--user:
What is the default username?
admin
--password: is mandatory with this configuration:
What is the default password?
--allow-anonymous | --require-login:
Allow anonymous access?, valid values are Y, N, True, False
y
Auto tuning journal ...
done! Your system can make 250 writes per millisecond, your journal-buffer-timeout will be 4000
You can now start the broker by executing:
"/usr/server" run
Or you can run the broker in the background using:
"/usr/server" start
在创建实例时,您可以使用多种选项。要查看完整的选项列表,请使用 help
命令
在某些配置中,这些选项中的一些可能是必需的,系统可能会要求您提供额外的输入,例如
/var/lib/mybroker/bin/artemis run
/var/lib/mybroker/bin/artemis stop
假设您在 /var/lib/mybroker
下创建了代理实例,您只需执行以下操作即可启动代理实例
要停止 Apache ActiveMQ Artemis 实例,您将使用相同的 artemis
脚本,但使用 stop
参数。例如
请注意,Apache ActiveMQ Artemis 需要 Java 11 或更高版本。
默认情况下,将使用 etc/bootstrap.xml
配置。例如,可以通过运行 ./artemis run -- xml:path/to/bootstrap.xml
或您选择的其他配置来更改配置。
环境变量用于简化端口、主机和数据目录使用的更改,可以在 Linux 上的 etc/artemis.profile
和 Windows 上的 etc\artemis.profile.cmd
中找到。
- 4. 配置文件
-
这些是您可能在默认代理实例的
etc
目录中找到的文件,以及对它们配置内容的简短说明。向下滚动以获取更多详细信息(如果适用)。 - artemis.profile
-
系统属性和 JVM 参数(例如
Xmx
、Xms
等)。 - artemis-roles.properties
-
默认 基于属性的 JAAS 登录模块 的用户/角色映射。
- artemis-users.properties
-
默认 基于属性的 JAAS 登录模块 的用户/密码。
- bootstrap.xml
-
嵌入式 Web 服务器、安全、
broker.xml
的位置。 - broker.xml
-
核心代理配置,例如接受器、地址、队列、转移、集群;完整参考
- jolokia-access.xml
-
Jolokia 的安全性,特别是跨域资源共享 (CORS)。
- log4j2.properties
-
日志记录配置,如级别、日志文件位置等。
- login.config
-
JAAS 安全性 的标准 Java 配置。
management.xml
远程连接和 JMX MBean 的安全性。
<broker xmlns="https://activemq.apache.org/schema">
<jaas-security domain="activemq"/>
<server configuration="file:/path/to/broker.xml"/>
<web path="web">
<binding uri="https://127.0.0.1:8161">
<app url="activemq-branding" war="activemq-branding.war"/>
<app url="artemis-plugin" war="artemis-plugin.war"/>
<app url="console" war="console.war"/>
</binding>
</web>
</broker>
Apache ActiveMQ Artemis 核心代理的配置包含在 broker.xml
中。
您可以为 Apache ActiveMQ Artemis 配置许多属性。在大多数情况下,默认值就足够了,实际上每个属性都可以有默认值,这意味着只有一个空 configuration
元素的文件是一个有效的配置文件。不同的配置将在整个手册中进行解释,或者您可以参考配置参考 此处。
<connector name="netty">tcp://${activemq.remoting.netty.host:localhost}:${activemq.remoting.netty.port:61616}</connector>
可以在所有配置文件中使用系统属性替换,方法是用系统属性的名称替换值。以下是一个使用连接器配置的示例
在这里,您可以看到我们将 2 个值替换为系统属性 activemq.remoting.netty.host
和 activemq.remoting.netty.port
。如果存在这些值,它们将被系统属性中找到的值替换,否则它们将分别默认为 localhost
或 61616
。也可以不提供默认值(即 ${activemq.remoting.netty.host}
),但是在这种情况下必须提供系统属性。
$ ./artemis-service.exe install
在 Windows 上,您可以选择将 ActiveMQ Artemis 作为服务运行。只需使用以下命令来安装它
创建过程应该会提示您有关 artemis-service.exe
可用命令的信息。
引导依赖项(如日志处理程序)必须在启动时可供日志管理器访问。将依赖项打包到 jar 中,并将其放在日志管理器 jar 之前的引导类路径上。这可以通过在 artemis.profile
中定义的 JAVA_ARGS
变量中追加 jar 来实现,方法是使用 -Xbootclasspath/a
选项。
可以使用环境变量 JAVA_ARGS_APPEND
来追加或覆盖选项。
-Dartemis.extra.libs=/usr/local/share/java/lib1,/usr/local/share/java/lib2
export ARTEMIS_EXTRA_LIBS=/usr/local/share/java/lib1,/usr/local/share/java/lib2
运行时依赖项(如转换器、代理插件、JDBC 驱动程序、密码解码器等)必须在运行时可供代理访问。将依赖项打包到 jar 中,并将其放在代理的类路径上。这可以通过将 jar 文件放在代理分发本身的 lib
目录中、将 jar 文件放在代理实例的 lib
目录中、使用 artemis.extra.libs
系统属性设置包含 jar 文件的目录,或使用 ARTEMIS_EXTRA_LIBS
环境变量设置包含 jar 文件的目录来实现。默认情况下,代理实例没有 lib
目录,因此可能需要创建它。它应该位于与 bin
、data
、log
等目录相同的“顶层”。artemis.extra.libs
系统属性是包含 jar 文件的目录的逗号分隔列表,即
ARTEMIS_EXTRA_LIBS
环境变量是包含 jar 文件的目录的逗号分隔列表,如果定义了 artemis.extra.libs
系统属性,则会忽略它,即
如果您在 Linux 上使用 异步 IO 日志,则需要在 Java 选项中指定 java.library.path
作为属性。这在脚本中自动完成。