如何配置ActiveMQ代理

将生成的actiemqBroker.war部署到您的Tomcat实例中,并检查提取的WebApp。您可以找到一个名为active emq-jmx.properties的文件,该文件将帮助您使用最重要的参数配置您的实例。无论如何,这只是一个示例,我们鼓励您检查部署到activemq/WEB-INF/classes/ApplicationContext.xml的ApplicationConext.xml文件,该文件是完整的配置:

...
<!-- The transport connectors expose ActiveMQ over a given protocol to
      clients and other brokers.
      For more information, see: http://activemq.apache.org/configuring-transports.html -->
<transportConnectors>
        <transportConnector name="openwire" uri="tcp://192.168.1.XXX:61616" />
</transportConnectors>
...

持久性配置

可以为无法立即传递的消息启用持久性(例如,所有使用者都已关闭)。在这里可以找到详细的信息,我们将简单地提供如何实现这一点的基本信息。要为要传递的消息配置持久性,您需要在与上述相同的文件中设置<persistenceadapter>节点,然后在您选择的DBMS中配置适当的数据源。

...
<persistenceAdapter>
<!-- <kahaDB directory="${activemq.base}/data/kahadb"/> -->
  <jdbcPersistenceAdapter dataDirectory="activemq-data"
        dataSource="#postgres-ds" lockKeepAlivePeriod="0"/>
</persistenceAdapter>
...

在上面的部分中,我们定义了一个jdbcPersistenceAdapter,它连接到一个名为“postgres ds”的数据源,它强制代理在无法保证传递时(例如,一个副本意外关闭)使用PostgreSQL来持久化它的消息。现在,您需要配置您自己的数据源,如下面一节中指定的那样,这些数据源是特定于不同DBMS的。

Oracle数据源

要将代理配置为使用Oracle数据库作为数据源,您需要取消对applicationcontext.xml文件的注释并修改以下和平:

...
<bean id="oracle-ds" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
  <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
  <property name="url" value="jdbc:oracle:thin:@localhost:1521:AMQDB"/>
  <property name="username" value="oracle"/>
  <property name="password" value=" oracle "/>
  <property name="poolPreparedStatements" value="true"/>
</bean>
...

此外,还需要确保包含Oracle驱动程序的JAR正确部署在activemq war文件的WEB-INF/lib中。同时,所提供的说明中引用的数据库以及用户必须已经存在。

Postgres数据源

将PostgreSQL配置为用于保持ActiveMQ代理的消息的数据源,遵循与上面相同的模式。请参阅下面的示例。

...
<bean id="postgres-ds" class="org.postgresql.ds.PGPoolingDataSource">
        <property name="serverName" value="192.168.1.XXX"/>
        <property name="databaseName" value="activemq"/>
        <property name="portNumber" value="5432"/>
        <property name="user" value="postgres"/>
        <property name="password" value="postgres"/>
        <property name="dataSourceName" value="postgres"/>
        <property name="initialConnections" value="15"/>
        <property name="maxConnections" value="30"/>
</bean>
...

此外,您还需要确保将包含PostgreSQL驱动程序的JAR正确地部署在active emq war文件的WEB-INF/lib中。同时,所提供的说明中提到的数据库以及用户必须已经存在。

备注

以上ApplicationContext.xml文件包含一些未使用的节,这些节被有意注释掉,以显示不同类型的配置 [参考ActiveMQ] .

Kaha数据源(嵌入式数据库)

除了使用如上所述的服务器DBMS之外,我们还可以使用嵌入式数据库来简化演示的用例,因为这通常会大大简化配置。在这个链接上,可以找到实现这个结果所需的所有信息;基本上,我们需要取消相关数据源的注释,然后从PersistenceAdapter引用它。

使用JMX的控制实例

确保编辑activemq-jmx.properties(或通过环境变量),为不同的代理实例设置不同的jmx端口。按照说明将实例部署到2个不同的webapplication容器(f.e.tomcat)中,并启动这两个应用程序(在不同的端口f.e.8081和8082上)。现在运行jconsole通过jmx连接到代理:

${JAVA_HOME}/bin/jconsole

与经纪人联系后,您可能会看到如下情况:

../../../_images/master_slave_jmx_1.png

您可以查看控制台,如您所见,代理的第二个实例不能查看文件(示例使用kahadb);在右侧的widhow中,JMX控制台中也可以看到这一点。

如果现在选择“操作”(在左侧窗口),您将看到:

../../../_images/master_slave_jmx_2.png

使用这个控制台,我们可以执行许多操作,所以为了模拟一个代理,我们尝试单击“stop()”按钮。

这样,第一个代理实例将停止,JMX连接将关闭,第二个实例(在右侧)将保持对数据库的控制。

../../../_images/master_slave_jmx_3.png
../../../_images/master_slave_jmx_4.png