ActiveMQ Artemis 具有一个命令行界面 (CLI),可用于管理代理的某些方面,例如实例创建、基本用户管理、队列和地址管理等。该界面专为简单用例而设计,并以人类为中心。它不是用于完整代理管理的全面命令集。有一个全面的管理 API 可用,其中包含许多返回 JSON 格式输出的操作,这些操作更适合在脚本和其他自动化流程中使用。

CLI 有两种使用方式

  • 传统的 CLI 命令,例如:./artemis [COMMAND] [PARAMETERS]

  • 一个使用./artemis./artemis shell 命令访问的自定义 shell。

通过传统 CLI 命令提供的所有命令也可以通过 shell 界面使用。

shell 的一个好处是它会在您重复命令时重用一些信息。例如,一旦您向一个命令提供代理 URI 和用户名和密码,这些值将透明地应用于同一 shell 会话中的其他命令。当然,shell 还允许您避免为每个命令重新输入 ./artemis

1. 获取帮助

您可以通过输入以下内容获取可用命令的完整列表

$ ./artemis help
Usage: artemis [COMMAND]
ActiveMQ Artemis Command Line
Commands:
  help        use 'help <command>' for more information
  pwd         Information on current folder and instance.
  shell       JLine3 shell helping using the CLI
  producer    Send message(s) to a broker.
  transfer    Move messages from one destination towards another destination.
  consumer    Consume messages from a queue.
  browser     Browse messages on a queue.
  mask        Mask a password and print it out.
  version     Print version information.
  perf        use 'help perf' for sub commands list
  check       use 'help check' for sub commands list
  queue       use 'help queue' for sub commands list
  address     use 'help address' for sub commands list
  connect     Connect to the broker validating credentials for commands.
  disconnect  Clear previously typed user credentials.
  data        use 'help data' for sub commands list
  create      Create a new broker instance.
  upgrade     Update a broker instance to the current artemis.home, keeping all
                the data and broker.xml. Warning: backup your instance before
                using this command and compare the files.
  completion  Generates the auto complete script file to be used in bash or
                zsh. Usage: source <(./artemis completion)

也可以在特定命令或子命令处使用help 获取更多信息。例如,要获取data 子命令的列表,请输入./artemis help data

$ ./artemis help data
Usage: artemis data [COMMAND]
use 'help data' for sub commands list
Commands:
  recover  Recover (undelete) every message on the journal by creating a new
             output journal. Rolled back and acked messages will be sent out to
             the output as much as possible.
  print    Print data records information. WARNING: don't use while a
             production server is running.
  exp      Export all message-data using an XML that could be interpreted by
             any system.
  imp      Import all message-data using an XML that could be interpreted by
             any system.
  decode   Decode a journal's internal format into a new set of journal files.
  encode   Encode a set of journal files into an internal encoded data format.
  compact  Compact the journal of a non running server.

或者您可以获取特定命令的帮助。例如,./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.

2. Bash 和 Zsh 自动补全

Bash 和 Zsh 提供了自动补全命令的方法。为了与该功能集成,您可以选择生成自动补全脚本,即

$ source <(./artemis completion)

安装自动补全后,您可以按TAB 键查看自动补全信息

$ ./artemis
activation    check         consumer      disconnect    mask          producer      run           transfer      version
address       completion    create        help          perf          pwd           shell         upgrade
browser       connect       data          kill          perf-journal  queue         stop          user

为了查看可用的各种参数,您必须输入-- 然后按TAB

$ ./artemis create --
--addresses                             --jdbc-bindings-table-name              --paging
--aio                                   --jdbc-connection-url                   --password
--allow-anonymous                       --jdbc-driver-class-name                --ping
--autocreate                            --jdbc-large-message-table-name         --port-offset
--autodelete                            --jdbc-lock-expiration                  --queues
--blocking                              --jdbc-lock-renew-period                --relax-jolokia
--cluster-password                      --jdbc-message-table-name               --replicated
--cluster-user                          --jdbc-network-timeout                  --require-login
--clustered                             --jdbc-node-manager-table-name          --role

3. 需要输入

如果某些功能没有通过参数明确提供,则可能需要交互式用户输入。例如,在连接到代理或创建代理实例的情况下

$ ./artemis queue stat
Connection brokerURL = tcp://127.0.0.1:61616
Connection failed::AMQ229031: Unable to validate user from /127.0.0.1:56320. Username: null; SSL certificate subject DN: unavailable

--user:
Type the username for a retry
myUser

--password: is mandatory with this configuration:
Type the password for a retry

4. Artemis Shell

要初始化 shell 会话,请输入./artemis shell(如果您愿意,也可以只输入./artemis

$ ./artemis

ActiveMQ Artemis shell 提供了一个界面,可用于直接执行命令,而无需离开 Java 虚拟机。

     _        _               _
    / \  ____| |_  ___ __  __(_) _____
   / _ \|  _ \ __|/ _ \  \/  | |/  __/
  / ___ \ | \/ |_/  __/ |\/| | |\___ \
 /_/   \_\|   \__\____|_|  |_|_|/___ /
 Apache ActiveMQ Artemis


For a list of commands, type help or press <TAB>:
Type exit or press <CTRL-D> to leave the session:
Apache ActiveMQ Artemis >

4.1. 交互式连接

可以将您的 CLI 客户端一次性认证到服务器,并将连接信息用于其他命令

Apache ActiveMQ Artemis > connect --user=myUser --password=myPass --url tcp://127.0.0.1:61616
Connection brokerURL = tcp://127.0.0.1:61616
Connection Successful!

现在,任何需要身份验证的命令都将重用这些参数。

例如,子命令queue stat 将重用先前的信息来执行其与代理的连接。

Apache ActiveMQ Artemis > queue stat
Connection brokerURL = tcp://127.0.0.1:61616
|NAME                     |ADDRESS                  |CONSUMER_COUNT|MESSAGE_COUNT|MESSAGES_ADDED|DELIVERING_COUNT|MESSAGES_ACKED|SCHEDULED_COUNT|ROUTING_TYPE|
|DLQ                      |DLQ                      |0             |0            |0             |0               |0             |0              |ANYCAST     |
|ExpiryQueue              |ExpiryQueue              |0             |0            |0             |0               |0             |0              |ANYCAST     |
|Order                    |Order                    |0             |4347         |4347          |0               |0             |0              |ANYCAST     |
|activemq.management.0b...|activemq.management.0b...|1             |0            |0             |0               |0             |0              |MULTICAST   |

4.2. 静态连接

可以以静态配置的初始连接启动 shell,例如

$ ./artemis shell --user <username> --password <password> --url tcp://<hostname>:<port>

CLI 不会再询问代理 URL 或用户/密码,例如

$ ./artemis shell --user myUser --password myPass
...


Apache ActiveMQ Artemis > queue stat
Connection brokerURL = tcp://127.0.0.1:61616
|NAME                     |ADDRESS                  |CONSUMER_COUNT|MESSAGE_COUNT|MESSAGES_ADDED|DELIVERING_COUNT|MESSAGES_ACKED|SCHEDULED_COUNT|ROUTING_TYPE|
|DLQ                      |DLQ                      |0             |0            |0             |0               |0             |0              |ANYCAST     |
|ExpiryQueue              |ExpiryQueue              |0             |0            |0             |0               |0             |0              |ANYCAST     |
|TEST                     |TEST                     |0             |8743         |8743          |0               |0             |0              |ANYCAST     |
|activemq.management.2a...|activemq.management.2a...|1             |0            |0             |0               |0             |0              |MULTICAST   |