ActiveMQ provides a WEB-based console, and now there are two versions.
The main objects to monitor are connected machines, queues, topics, messages.
1. Introduce the embedded jetty.xml at the end of activemq.xml to start the web control system
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core.xsd"> ... <broker xmlns="http://activemq.apache.org/schema/core" brokerName="localhost" dataDirectory="${activemq.data}"> ... </broker> <!--web background monitoring --> <import resource="jetty.xml"/> </beans>
2. In jetty.xml, the embedded jetty container is initialized and run by spring
<bean id="Server" depends-on="jettyPort" class="org.eclipse.jetty.server.Server" init-method="start" destroy-method="stop"> <property name="connectors"> <list> <bean id="Connector" class="org.eclipse.jetty.server.nio.SelectChannelConnector"> <!-- see the jettyPort bean --> <property name="port" value="#{systemProperties['jetty.port']}" /> </bean> <!-- Enable this connector if you wish to use https with web console --> <!-- After turning on, turn on the SSL function <bean id="SecureConnector" class="org.eclipse.jetty.server.ssl.SslSelectChannelConnector"> <property name="port" value="8162" /> <property name="keystore" value="file:${activemq.conf}/broker.ks" /> <property name="password" value="password" /> </bean> --> </list> </property> <property name="handler"> <bean id="handlers" class="org.eclipse.jetty.server.handler.HandlerCollection"> <property name="handlers"> <list> <ref bean="rewrite"/> <ref bean="contexts" /> <ref bean="securityHandler" /> </list> </property> </bean> </property> </bean>
2.1 Port configuration, depends-on="jettyPort" reference
<bean id="jettyPort" class="org.apache.activemq.web.WebConsolePort" init-method="start"> <!-- the default port number for the web console --> <property name="port" value="8161"/> </bean>2.2 Other configurations required by jetty
<bean id="rewrite" class="org.eclipse.jetty.rewrite.handler.RewriteHandler"> <property name="rules"> <set> <bean class="org.eclipse.jetty.rewrite.handler.RedirectRegexRule"> <property name="regex" value="/api/jolokia(.*)"/> <property name="replacement" value="/hawtio/jolokia$1"/> </bean> </set> </property> </bean> <bean id="contexts" class="org.eclipse.jetty.server.handler.ContextHandlerCollection"> </bean>2.3 Permission configuration
<bean id="securityLoginService" class="org.eclipse.jetty.security.HashLoginService"> <property name="name" value="ActiveMQRealm" /> <property name="config" value="${activemq.conf}/jetty-realm.properties" /> </bean> <bean id="securityConstraint" class="org.eclipse.jetty.util.security.Constraint"> <property name="name" value="BASIC" /> <property name="roles" value="user,admin" /> <!-- set authenticate=false to disable login --> <property name="authenticate" value="true" /> </bean> <bean id="adminSecurityConstraint" class="org.eclipse.jetty.util.security.Constraint"> <property name="name" value="BASIC" /> <property name="roles" value="admin" /> <!-- set authenticate=false to disable login --> <property name="authenticate" value="true" /> </bean> <bean id="securityConstraintMapping" class="org.eclipse.jetty.security.ConstraintMapping"> <property name="constraint" ref="securityConstraint" /> <property name="pathSpec" value="/admin/*,*.jsp" /> </bean> <bean id="adminSecurityConstraintMapping" class="org.eclipse.jetty.security.ConstraintMapping"> <property name="constraint" ref="adminSecurityConstraint" /> <property name="pathSpec" value="*.action" /> </bean> <bean id="securityHandler" class="org.eclipse.jetty.security.ConstraintSecurityHandler"> <property name="loginService" ref="securityLoginService" /> <property name="authenticator"> <bean class="org.eclipse.jetty.security.authentication.BasicAuthenticator" /> </property> <property name="constraintMappings"> <list> <ref bean="adminSecurityConstraintMapping" /> <ref bean="securityConstraintMapping" /> </list> </property> <property name="handler"> <bean id="sec" class="org.eclipse.jetty.server.handler.HandlerCollection"> <property name="handlers"> <list> <bean class="org.eclipse.jetty.webapp.WebAppContext"> <property name="contextPath" value="/hawtio" /> <!--New web management platform---> <property name="war" value="${activemq.home}/webapps/hawtio" /> <property name="logUrlOnStart" value="true" /> </bean> <bean class="org.eclipse.jetty.webapp.WebAppContext"> <property name="contextPath" value="/admin" /> <!--Old web management platform---> <property name="resourceBase" value="${activemq.home}/webapps/admin" /> <property name="logUrlOnStart" value="true" /> </bean> <bean class="org.eclipse.jetty.server.handler.ResourceHandler"> <property name="directoriesListed" value="false" /> <property name="welcomeFiles"> <list> <value>index.html</value> </list> </property> <!---Automatically load resources under webapps--> <property name="resourceBase" value="${activemq.home}/webapps/" /> </bean> <bean id="defaultHandler" class="org.eclipse.jetty.server.handler.DefaultHandler"> <property name="serveIcon" value="false" /> </bean> </list> </property> </bean> </property> </bean>
3. After startup, you can access it in the browser
http://127.0.0.1:8161/
Contains three items:
(1) Manage ActiveMQ broker new management platform
(2) Manage ActiveMQ broker using the old console
(3) Some DEMOs.
The configuration file required for logging in to the old system platform
conf/jetty-realm.properties, just based on BasicAuthenticator
# Defines users that can access the web (console, demo, etc.) # username: password [,rolename ...] admin: admin, admin
The platform configuration required for the new system, based on
conf/login.config
activemq { org.apache.activemq.jaas.PropertiesLoginModule required org.apache.activemq.jaas.properties.user="users.properties" org.apache.activemq.jaas.properties.group="groups.properties"; };
conf/users.properties
admin = admin
conf/groups.properties
admins=admin
4. Principle of safety verification, to be continued
Too hasty to write this first. . .